Merge remote-tracking branch 'origin/3.6' into 3.7

Conflicts:
	ChangeLog
	htdocs/adherents/fiche.php
	htdocs/comm/fiche.php
	htdocs/comm/mailing/fiche.php
	htdocs/comm/propal.php
	htdocs/comm/propal/class/propal.class.php
	htdocs/commande/class/commande.class.php
	htdocs/commande/fiche.php
	htdocs/compta/facture.php
	htdocs/compta/paiement.php
	htdocs/core/class/html.formcompany.class.php
	htdocs/core/tpl/login.tpl.php
	htdocs/expedition/fiche.php
	htdocs/fourn/commande/fiche.php
	htdocs/fourn/facture/fiche.php
	htdocs/fourn/facture/paiement.php
	htdocs/fourn/fiche.php
	htdocs/main.inc.php
	htdocs/product/fournisseurs.php
	htdocs/resource/card.php
This commit is contained in:
Laurent Destailleur 2015-01-18 17:13:42 +01:00
commit 5c5ff72ecd
36 changed files with 5525 additions and 5420 deletions

View File

@ -52,6 +52,9 @@ http://www.fsf.org/licensing/licenses/index_html
Copyright Copyright
--------- ---------
Copyright (C) 2015
- Marcos García <marcosgdf@gmail.com>
Copyright (C) 2014 Copyright (C) 2014
- Laurent Destailleur <eldy@users.sourceforge.net> - Laurent Destailleur <eldy@users.sourceforge.net>
- Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr> - Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>

View File

@ -174,6 +174,18 @@ Dolibarr better:
- Fix: ref_ext was not saved when recording a customer order from web service - Fix: ref_ext was not saved when recording a customer order from web service
- Fix: amarok is a bugged theme making dolidroid failed. We swith to eldy automatically with dolidroid. - Fix: amarok is a bugged theme making dolidroid failed. We swith to eldy automatically with dolidroid.
- Fix: withdrawal create error if in the same month are deleted previus withdrawals. - Fix: withdrawal create error if in the same month are deleted previus withdrawals.
- Fix: [ bug #1788 ] Duplicated doActions hook in product/fournisseurs.php
- Fix: withdrawal create error if in the same month are deleted previus withdrawals.
- Fix: [ bug #1801 ] FAC_FORCE_DATE_VALIDATION constant alters supplier invoice date given to numeration modules
- Fix: [ bug #1802 ] SQL error when updating a task with PostgreSQL database
- Fix: [ bug #1785 ] Start date is lost in Project > Linked objects
- Fix: [ bug #1804 ] SQL error when sending email without addresee
- Fix: [ bug #1803 ] AJAX company contact input is not aligned
- Fix: [ bug #1787 ] Incorrect behaviour of doActions hook
- Fix: [ bug #1796 ] Unable to use numeration modules from an external module
- Fix: [ bug #1783 ] SQL error when enabling 3rd party module with PostgreSQL and MySQL strict mode ON
- Fix: [ bug #1717 ] Sorting unpaid invoices by amount received brings due amount
- Fix: [ bug #1784 ] MOTD doesn't show up in Amarok theme
***** ChangeLog for 3.6.2 compared to 3.6.1 ***** ***** ChangeLog for 3.6.2 compared to 3.6.1 *****
- Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice. - Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice.
@ -338,6 +350,8 @@ Fix: Paypal link were broken dur to SSL v3 closed.
Fix: [ bug #1769 ] Error when installing to a PostgreSQL DB that contains numbers Fix: [ bug #1769 ] Error when installing to a PostgreSQL DB that contains numbers
Fix: [ bug #1752 ] Date filter of margins module, filters since 12H instead of 00H Fix: [ bug #1752 ] Date filter of margins module, filters since 12H instead of 00H
Fix: [ bug #1757 ] Sorting breaks product/service statistics Fix: [ bug #1757 ] Sorting breaks product/service statistics
Fix: [ bug #1797 ] Tulip supplier invoice module takes creation date instead of invoice date
Fix: [ bug #1792 ] Users are not allowed to see margins module index page when no product view permission is enabled
***** ChangeLog for 3.5.6 compared to 3.5.5 ***** ***** ChangeLog for 3.5.6 compared to 3.5.5 *****
Fix: Avoid missing class error for fetch_thirdparty method #1973 Fix: Avoid missing class error for fetch_thirdparty method #1973

File diff suppressed because it is too large Load Diff

View File

@ -66,6 +66,7 @@ $pageprev = $page - 1;
$pagenext = $page + 1; $pagenext = $page + 1;
if (! $sortorder) $sortorder="ASC"; if (! $sortorder) $sortorder="ASC";
if (! $sortfield) $sortfield="nom"; if (! $sortfield) $sortfield="nom";
$cancelbutton = GETPOST('cancel');
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('commcard','globalcard')); $hookmanager->initHooks(array('commcard','globalcard'));
@ -80,78 +81,78 @@ $parameters = array('socid' => $id);
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
//Some actions show a "cancel" input submit button with name="cancel" if (empty($reshook))
$cancelbutton = GETPOST('cancel');
if ($action == 'setcustomeraccountancycode')
{ {
if (! $cancelbutton) if ($action == 'setcustomeraccountancycode')
{ {
$result=$object->fetch($id); if (! $cancelbutton)
$object->code_compta=$_POST["customeraccountancycode"];
$result=$object->update($object->id,$user,1,1,0);
if ($result < 0)
{ {
setEventMessage($object->errors, 'errors'); $result=$object->fetch($id);
$object->code_compta=$_POST["customeraccountancycode"];
$result=$object->update($object->id,$user,1,1,0);
if ($result < 0)
{
setEventMessage($object->errors, 'errors');
}
} }
$action="";
} }
$action="";
}
// conditions de reglement // conditions de reglement
if ($action == 'setconditions' && $user->rights->societe->creer) if ($action == 'setconditions' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentTerms(GETPOST('cond_reglement_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
}
// mode de reglement
if ($action == 'setmode' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentMethods(GETPOST('mode_reglement_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
}
// assujetissement a la TVA
if ($action == 'setassujtva' && $user->rights->societe->creer)
{
$object->fetch($id);
$object->tva_assuj=$_POST['assujtva_value'];
// TODO move to DAO class
$sql = "UPDATE ".MAIN_DB_PREFIX."societe SET tva_assuj='".$_POST['assujtva_value']."' WHERE rowid='".$id."'";
$result = $db->query($sql);
if (! $result) dol_print_error($result);
}
// set prospect level
if ($action == 'setprospectlevel' && $user->rights->societe->creer)
{
$object->fetch($id);
$object->fk_prospectlevel=GETPOST('prospect_level_id','alpha');
$result=$object->set_prospect_level($user);
if ($result < 0) setEventMessage($object->error,'errors');
}
// Update communication level
if ($action == 'cstc')
{
$object->fetch($id);
$object->stcomm_id=GETPOST('stcomm','int');
$result=$object->set_commnucation_level($user);
if ($result < 0) setEventMessage($object->error,'errors');
}
// Update communication level
if ($action == 'setOutstandingBill')
{
if (!$cancelbutton)
{ {
$object->fetch($id); $object->fetch($id);
$object->outstanding_limit=GETPOST('OutstandingBill'); $result=$object->setPaymentTerms(GETPOST('cond_reglement_id','int'));
$result=$object->set_OutstandingBill($user); if ($result < 0) dol_print_error($db,$object->error);
}
// mode de reglement
if ($action == 'setmode' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentMethods(GETPOST('mode_reglement_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
}
// assujetissement a la TVA
if ($action == 'setassujtva' && $user->rights->societe->creer)
{
$object->fetch($id);
$object->tva_assuj=$_POST['assujtva_value'];
// TODO move to DAO class
$sql = "UPDATE ".MAIN_DB_PREFIX."societe SET tva_assuj='".$_POST['assujtva_value']."' WHERE rowid='".$id."'";
$result = $db->query($sql);
if (! $result) dol_print_error($result);
}
// set prospect level
if ($action == 'setprospectlevel' && $user->rights->societe->creer)
{
$object->fetch($id);
$object->fk_prospectlevel=GETPOST('prospect_level_id','alpha');
$result=$object->set_prospect_level($user);
if ($result < 0) setEventMessage($object->error,'errors'); if ($result < 0) setEventMessage($object->error,'errors');
} }
// Update communication level
if ($action == 'cstc')
{
$object->fetch($id);
$object->stcomm_id=GETPOST('stcomm','int');
$result=$object->set_commnucation_level($user);
if ($result < 0) setEventMessage($object->error,'errors');
}
// Update communication level
if ($action == 'setOutstandingBill')
{
if (!$cancelbutton)
{
$object->fetch($id);
$object->outstanding_limit=GETPOST('OutstandingBill');
$result=$object->set_OutstandingBill($user);
if ($result < 0) setEventMessage($object->error,'errors');
}
}
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2550,21 +2550,18 @@ class Propal extends CommonObject
{ {
$mybool=false; $mybool=false;
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); $file = $conf->global->PROPALE_ADDON.".php";
foreach ($dirmodels as $reldir) $classname = $conf->global->PROPALE_ADDON;
{
$file = $conf->global->PROPALE_ADDON.".php";
$classname = $conf->global->PROPALE_ADDON;
// Include file with class // Include file with class
foreach ($conf->file->dol_document_root as $dirroot) $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
{ foreach ($dirmodels as $reldir) {
$dir = $dirroot.$reldir."/core/modules/propale/";
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
}
$dir = dol_buildpath($reldir."core/modules/propale/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
if (! $mybool) if (! $mybool)
{ {
@ -2581,14 +2578,14 @@ class Propal extends CommonObject
return $numref; return $numref;
} }
else else
{ {
$this->error=$obj->error; $this->error=$obj->error;
//dol_print_error($db,"Propale::getNextNumRef ".$obj->error); //dol_print_error($db,"Propale::getNextNumRef ".$obj->error);
return ""; return "";
} }
} }
else else
{ {
$langs->load("errors"); $langs->load("errors");
print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
return ""; return "";

View File

@ -177,11 +177,13 @@ $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if ($action == 'cstc') if (empty($reshook)) {
{ if ($action == 'cstc')
$sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm = ".$_GET["pstcomm"]; {
$sql .= " WHERE rowid = ".$_GET["socid"]; $sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm = ".$_GET["pstcomm"];
$result=$db->query($sql); $sql .= " WHERE rowid = ".$_GET["socid"];
$result=$db->query($sql);
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -140,26 +140,25 @@ class Commande extends CommonOrder
if (! empty($conf->global->COMMANDE_ADDON)) if (! empty($conf->global->COMMANDE_ADDON))
{ {
$mybool=false; $mybool=false;
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
foreach ($dirmodels as $reldir)
{
$file = $conf->global->COMMANDE_ADDON.".php";
$classname = $conf->global->COMMANDE_ADDON;
// Include file with class $file = $conf->global->COMMANDE_ADDON.".php";
foreach ($conf->file->dol_document_root as $dirroot) $classname = $conf->global->COMMANDE_ADDON;
{
$dir = $dirroot.$reldir."/core/modules/commande/"; // Include file with class
// Load file with numbering class (if found) $dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
$mybool|=@include_once $dir.$file; foreach ($dirmodels as $reldir)
} {
} $dir = dol_buildpath($reldir."core/modules/commande/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
if (! $mybool) if (! $mybool)
{ {
dol_print_error('',"Failed to include file ".$file); dol_print_error('',"Failed to include file ".$file);
return ''; return '';
} }
$obj = new $classname(); $obj = new $classname();

File diff suppressed because it is too large Load Diff

View File

@ -2497,52 +2497,64 @@ class Facture extends CommonInvoice
else if ($conf->global->FACTURE_ADDON=='terre') $conf->global->FACTURE_ADDON='mod_facture_terre'; else if ($conf->global->FACTURE_ADDON=='terre') $conf->global->FACTURE_ADDON='mod_facture_terre';
else if ($conf->global->FACTURE_ADDON=='mercure') $conf->global->FACTURE_ADDON='mod_facture_mercure'; else if ($conf->global->FACTURE_ADDON=='mercure') $conf->global->FACTURE_ADDON='mod_facture_mercure';
$mybool=false; if (! empty($conf->global->FACTURE_ADDON))
$file = $conf->global->FACTURE_ADDON.".php";
$classname = $conf->global->FACTURE_ADDON;
// Include file with class
foreach ($conf->file->dol_document_root as $dirroot)
{ {
$dir = $dirroot."/core/modules/facture/"; $mybool=false;
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file; $file = $conf->global->FACTURE_ADDON.".php";
} $classname = $conf->global->FACTURE_ADDON;
// For compatibility
if (! $mybool)
{
$file = $conf->global->FACTURE_ADDON."/".$conf->global->FACTURE_ADDON.".modules.php";
$classname = "mod_facture_".$conf->global->FACTURE_ADDON;
$classname = preg_replace('/\-.*$/','',$classname);
// Include file with class // Include file with class
foreach ($conf->file->dol_document_root as $dirroot) $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
{
$dir = $dirroot."/core/modules/facture/"; foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/facture/");
// Load file with numbering class (if found) // Load file with numbering class (if found)
$mybool|=@include_once $dir.$file; $mybool|=@include_once $dir.$file;
} }
}
//print "xx".$mybool.$dir.$file."-".$classname;
if (! $mybool) // For compatibility
{ if (! $mybool)
dol_print_error('',"Failed to include file ".$file); {
return ''; $file = $conf->global->FACTURE_ADDON."/".$conf->global->FACTURE_ADDON.".modules.php";
} $classname = "mod_facture_".$conf->global->FACTURE_ADDON;
$classname = preg_replace('/\-.*$/','',$classname);
// Include file with class
foreach ($conf->file->dol_document_root as $dirroot)
{
$dir = $dirroot."/core/modules/facture/";
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
}
$obj = new $classname(); if (! $mybool)
$numref = ""; {
$numref = $obj->getNumRef($soc,$this,$mode); dol_print_error('',"Failed to include file ".$file);
return '';
}
if ($numref != "") $obj = new $classname();
{ $numref = "";
return $numref; $numref = $obj->getNextValue($soc,$this,$mode);
if ($numref != "")
{
return $numref;
}
else
{
dol_print_error($db,"Facture::getNextNumRef ".$obj->error);
return "";
}
} }
else else
{ {
//dol_print_error($db,get_class($this)."::getNextNumRef ".$obj->error); $langs->load("errors");
return false; print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
return "";
} }
} }

View File

@ -551,7 +551,7 @@ if ($resql)
print_liste_field_titre($langs->trans("Taxes"),$_SERVER["PHP_SELF"],"f.tva","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Taxes"),$_SERVER["PHP_SELF"],"f.tva","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("AmountTTC"),$_SERVER["PHP_SELF"],"f.total_ttc","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("AmountTTC"),$_SERVER["PHP_SELF"],"f.total_ttc","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Received"),$_SERVER["PHP_SELF"],"am","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Received"),$_SERVER["PHP_SELF"],"am","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Rest"),$_SERVER["PHP_SELF"],"am","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Rest"),$_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"fk_statut,paye,am","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"fk_statut,paye,am","",$param,'align="right"',$sortfield,$sortorder);
if (empty($mode)) if (empty($mode))
{ {

View File

@ -69,185 +69,188 @@ if ($facid > 0)
// Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array // Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('paiementcard','globalcard')); $hookmanager->initHooks(array('paiementcard','globalcard'));
$parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
/* /*
* Actions * Actions
*/ */
if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes')) $parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook))
{ {
$error = 0; if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes'))
{
$error = 0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$paiement_id = 0; $paiement_id = 0;
$totalpayment = 0; $totalpayment = 0;
$atleastonepaymentnotnull = 0; $atleastonepaymentnotnull = 0;
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date // Generate payment array and check if there is payment higher than invoice and payment date before invoice date
$tmpinvoice=new Facture($db); $tmpinvoice=new Facture($db);
foreach ($_POST as $key => $value) foreach ($_POST as $key => $value)
{
if (substr($key,0,7) == 'amount_')
{
$cursorfacid = substr($key,7);
$amounts[$cursorfacid] = price2num(trim(GETPOST($key)));
$totalpayment = $totalpayment + $amounts[$cursorfacid];
if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++;
$result=$tmpinvoice->fetch($cursorfacid);
if ($result <= 0) dol_print_error($db);
$amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement());
if ($amounts[$cursorfacid])
{
// Check amount
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
$addwarning=1;
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPay")).' '.$langs->trans("HelpPaymentHigherThanReminderToPay");
}
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date))
{
$langs->load("errors");
//$error++;
setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
}
}
$formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]);
}
}
// Check parameters
if (! GETPOST('paiementcode'))
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
$error++;
}
if (! empty($conf->banque->enabled))
{
// If bank module is on, account is required to enter a payment
if (GETPOST('accountid') <= 0)
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++;
}
}
if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
$error++;
}
if (empty($datepaye))
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
$error++;
}
}
/*
* Action add_paiement
*/
if ($action == 'add_paiement')
{
if ($error)
{
$action = 'create';
}
// Le reste propre a cette action s'affiche en bas de page.
}
/*
* Action confirm_paiement
*/
if ($action == 'confirm_paiement' && $confirm == 'yes')
{
$error=0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$db->begin();
// Clean parameters amount if payment is for a credit note
if (GETPOST('type') == 2)
{
foreach ($amounts as $key => $value) // How payment is dispatch
{ {
$newvalue = price2num($value,'MT'); if (substr($key,0,7) == 'amount_')
$amounts[$key] = -$newvalue; {
$cursorfacid = substr($key,7);
$amounts[$cursorfacid] = price2num(trim(GETPOST($key)));
$totalpayment = $totalpayment + $amounts[$cursorfacid];
if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++;
$result=$tmpinvoice->fetch($cursorfacid);
if ($result <= 0) dol_print_error($db);
$amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement());
if ($amounts[$cursorfacid])
{
// Check amount
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
$addwarning=1;
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPay")).' '.$langs->trans("HelpPaymentHigherThanReminderToPay");
}
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date))
{
$langs->load("errors");
//$error++;
setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
}
}
$formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]);
}
} }
}
if (! empty($conf->banque->enabled)) // Check parameters
{ if (! GETPOST('paiementcode'))
// Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement {
if (GETPOST('accountid') <= 0) setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
{ $error++;
setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors'); }
$error++;
}
}
// Creation of payment line if (! empty($conf->banque->enabled))
$paiement = new Paiement($db); {
$paiement->datepaye = $datepaye; // If bank module is on, account is required to enter a payment
$paiement->amounts = $amounts; // Array with all payments dispatching if (GETPOST('accountid') <= 0)
$paiement->paiementid = dol_getIdFromCode($db,$_POST['paiementcode'],'c_paiement'); {
$paiement->num_paiement = $_POST['num_paiement']; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$paiement->note = $_POST['comment']; $error++;
}
}
if (! $error) if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{ {
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices')=='on'?1:0)); setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
if ($paiement_id < 0) $error++;
{ }
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error) if (empty($datepaye))
{ {
$label='(CustomerInvoicePayment)'; setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
if (GETPOST('type') == 2) $label='(CustomerInvoicePaymentBack)'; $error++;
$result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),GETPOST('chqemetteur'),GETPOST('chqbank')); }
if ($result < 0) }
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error) /*
{ * Action add_paiement
$db->commit(); */
if ($action == 'add_paiement')
{
if ($error)
{
$action = 'create';
}
// Le reste propre a cette action s'affiche en bas de page.
}
// If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card /*
$invoiceid=0; * Action confirm_paiement
foreach ($paiement->amounts as $key => $amount) */
{ if ($action == 'confirm_paiement' && $confirm == 'yes')
$facid = $key; {
if (is_numeric($amount) && $amount <> 0) $error=0;
{
if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
else $invoiceid=$facid;
} $db->begin();
}
if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/compta/facture.php?facid='.$invoiceid; // Clean parameters amount if payment is for a credit note
else $loc = DOL_URL_ROOT.'/compta/paiement/card.php?id='.$paiement_id; if (GETPOST('type') == 2)
header('Location: '.$loc); {
exit; foreach ($amounts as $key => $value) // How payment is dispatch
} {
else $newvalue = price2num($value,'MT');
{ $amounts[$key] = -$newvalue;
$db->rollback(); }
} }
if (! empty($conf->banque->enabled))
{
// Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement
if (GETPOST('accountid') <= 0)
{
setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++;
}
}
// Creation of payment line
$paiement = new Paiement($db);
$paiement->datepaye = $datepaye;
$paiement->amounts = $amounts; // Array with all payments dispatching
$paiement->paiementid = dol_getIdFromCode($db,$_POST['paiementcode'],'c_paiement');
$paiement->num_paiement = $_POST['num_paiement'];
$paiement->note = $_POST['comment'];
if (! $error)
{
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices')=='on'?1:0));
if ($paiement_id < 0)
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error)
{
$label='(CustomerInvoicePayment)';
if (GETPOST('type') == 2) $label='(CustomerInvoicePaymentBack)';
$result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),GETPOST('chqemetteur'),GETPOST('chqbank'));
if ($result < 0)
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error)
{
$db->commit();
// If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card
$invoiceid=0;
foreach ($paiement->amounts as $key => $amount)
{
$facid = $key;
if (is_numeric($amount) && $amount <> 0)
{
if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment
else $invoiceid=$facid;
}
}
if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/compta/facture.php?facid='.$invoiceid;
else $loc = DOL_URL_ROOT.'/compta/paiement/card.php?id='.$paiement_id;
header('Location: '.$loc);
exit;
}
else
{
$db->rollback();
}
}
} }

View File

@ -211,23 +211,31 @@ class Contrat extends CommonObject
global $db, $langs, $conf; global $db, $langs, $conf;
$langs->load("contracts"); $langs->load("contracts");
$dir = DOL_DOCUMENT_ROOT . "/core/modules/contract"; if (!empty($conf->global->CONTRACT_ADDON))
if (empty($conf->global->CONTRACT_ADDON))
{ {
$conf->global->CONTRACT_ADDON='mod_contract_serpis'; $mybool = false;
}
$file = $conf->global->CONTRACT_ADDON.".php"; $file = $conf->global->CONTRACT_ADDON.".php";
$classname = $conf->global->CONTRACT_ADDON;
// Chargement de la classe de numerotation // Include file with class
$classname = $conf->global->CONTRACT_ADDON; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/contract/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
if (! $mybool)
{
dol_print_error('',"Failed to include file ".$file);
return '';
}
$result=include_once $dir.'/'.$file;
if ($result)
{
$obj = new $classname(); $obj = new $classname();
$numref = ""; $numref = "";
$numref = $obj->getNextValue($soc,$this); $numref = $obj->getNextValue($soc,$this);
@ -237,15 +245,17 @@ class Contrat extends CommonObject
} }
else else
{ {
$this->error = $obj->error;
dol_print_error($db,get_class($this)."::getNextValue ".$obj->error); dol_print_error($db,get_class($this)."::getNextValue ".$obj->error);
return ""; return "";
} }
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("Error_CONTRACT_ADDON_NotDefined"); $langs->load("errors");
print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
return ""; return "";
} }
} }
/** /**

View File

@ -612,8 +612,7 @@ class FormCompany
} }
print "\n".'<!-- Input text for third party with Ajax.Autocompleter (selectCompaniesForNewContact) -->'."\n"; print "\n".'<!-- Input text for third party with Ajax.Autocompleter (selectCompaniesForNewContact) -->'."\n";
//print '<table class="nobordernopadding"><tr class="nobordernopadding">';
//print '<td class="nobordernopadding">';
if ($obj->rowid == 0) if ($obj->rowid == 0)
{ {
print '<input type="text" size="30" id="search_'.$htmlname.'" name="search_'.$htmlname.'" value="" '.$htmloption.' />'; print '<input type="text" size="30" id="search_'.$htmlname.'" name="search_'.$htmlname.'" value="" '.$htmloption.' />';
@ -623,10 +622,9 @@ class FormCompany
print '<input type="text" size="30" id="search_'.$htmlname.'" name="search_'.$htmlname.'" value="'.$obj->name.'" '.$htmloption.' />'; print '<input type="text" size="30" id="search_'.$htmlname.'" name="search_'.$htmlname.'" value="'.$obj->name.'" '.$htmloption.' />';
} }
print ajax_autocompleter(($socid?$socid:-1),$htmlname,DOL_URL_ROOT.'/societe/ajaxcompanies.php','',$minLength); print ajax_autocompleter(($socid?$socid:-1),$htmlname,DOL_URL_ROOT.'/societe/ajaxcompanies.php','',$minLength);
//print '</td>';
//print '</tr>'; print "\n";
//print '</table>';
//print "\n";
return $socid; return $socid;
} }
else else

View File

@ -152,7 +152,7 @@ class Menubase
$sql.= " '".$this->fk_menu."',"; $sql.= " '".$this->fk_menu."',";
$sql.= " ".($this->fk_mainmenu?"'".$this->fk_mainmenu."'":"null").","; $sql.= " ".($this->fk_mainmenu?"'".$this->fk_mainmenu."'":"null").",";
$sql.= " ".($this->fk_leftmenu?"'".$this->fk_leftmenu."'":"null").","; $sql.= " ".($this->fk_leftmenu?"'".$this->fk_leftmenu."'":"null").",";
$sql.= " '".$this->position."',"; $sql.= " '".(int) $this->position."',";
$sql.= " '".$this->db->escape($this->url)."',"; $sql.= " '".$this->db->escape($this->url)."',";
$sql.= " '".$this->db->escape($this->target)."',"; $sql.= " '".$this->db->escape($this->target)."',";
$sql.= " '".$this->db->escape($this->titre)."',"; $sql.= " '".$this->db->escape($this->titre)."',";

View File

@ -883,6 +883,8 @@ abstract class DolibarrModules
$err=0; $err=0;
if (empty($this->const)) return 0;
foreach ($this->const as $key => $value) foreach ($this->const as $key => $value)
{ {
$name = $this->const[$key][0]; $name = $this->const[$key][0];
@ -950,6 +952,8 @@ abstract class DolibarrModules
$err=0; $err=0;
if (empty($this->const)) return 0;
foreach ($this->const as $key => $value) foreach ($this->const as $key => $value)
{ {
$name = $this->const[$key][0]; $name = $this->const[$key][0];

View File

@ -125,7 +125,8 @@ class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices
return 0; return 0;
} }
$numFinal=get_next_value($db,$mask,'facture_fourn','ref','',$objsoc->code_fournisseur,$object->datef); //Supplier invoices take invoice date instead of creation date for the mask
$numFinal=get_next_value($db,$mask,'facture_fourn','ref','',$objsoc->code_fournisseur,$object->date);
return $numFinal; return $numFinal;
} }

View File

@ -353,16 +353,20 @@ if (($action=="create") || ($action=="edit"))
print "<tr><td>"; print "<tr><td>";
print $langs->trans('CronEvery')."</td>"; print $langs->trans('CronEvery')."</td>";
print "<td><select name=\"nbfrequency\">"; print "<td><select name=\"nbfrequency\">";
for($i=1; $i<=60; $i++){ for($i=1; $i<=60; $i++)
if(($object->frequency/$object->unitfrequency) == $i){ {
if (! empty($object->unitfrequency) && ($object->frequency/$object->unitfrequency) == $i)
{
print "<option value='".$i."' selected='selected'>".$i."</option>"; print "<option value='".$i."' selected='selected'>".$i."</option>";
} }
else{ else
{
print "<option value='".$i."'>".$i."</option>"; print "<option value='".$i."'>".$i."</option>";
} }
} }
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"60\" id=\"frequency_minute\" "; $input = "<input type=\"radio\" name=\"unitfrequency\" value=\"60\" id=\"frequency_minute\" ";
if($object->unitfrequency=="60"){ if($object->unitfrequency=="60")
{
$input .= ' checked="checked" />'; $input .= ' checked="checked" />';
} }
else{ else{

View File

@ -108,477 +108,468 @@ $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if ($action == 'add') if (empty($reshook))
{ {
$error=0; if ($action == 'add')
$db->begin();
$object->note = GETPOST('note','alpha');
$object->origin = $origin;
$object->origin_id = $origin_id;
$object->weight = GETPOST('weight','int')==''?"NULL":GETPOST('weight','int');
$object->sizeH = GETPOST('sizeH','int')==''?"NULL":GETPOST('sizeH','int');
$object->sizeW = GETPOST('sizeW','int')==''?"NULL":GETPOST('sizeW','int');
$object->sizeS = GETPOST('sizeS','int')==''?"NULL":GETPOST('sizeS','int');
$object->size_units = GETPOST('size_units','int');
$object->weight_units = GETPOST('weight_units','int');
$date_delivery = dol_mktime(GETPOST('date_deliveryhour','int'), GETPOST('date_deliverymin','int'), 0, GETPOST('date_deliverymonth','int'), GETPOST('date_deliveryday','int'), GETPOST('date_deliveryyear','int'));
// On va boucler sur chaque ligne du document d'origine pour completer objet expedition
// avec info diverses + qte a livrer
$classname = ucfirst($object->origin);
$objectsrc = new $classname($db);
$objectsrc->fetch($object->origin_id);
$object->socid = $objectsrc->socid;
$object->ref_customer = $objectsrc->ref_client;
$object->date_delivery = $date_delivery; // Date delivery planed
$object->fk_delivery_address = $objectsrc->fk_delivery_address;
$object->shipping_method_id = GETPOST('shipping_method_id','int');
$object->tracking_number = GETPOST('tracking_number','alpha');
$object->ref_int = GETPOST('ref_int','alpha');
$object->note_private = GETPOST('note_private');
$object->note_public = GETPOST('note_public');
$num=count($objectsrc->lines);
$totalqty=0;
for ($i = 0; $i < $num; $i++)
{
$qty = "qtyl".$i;
$j=0;
$sub_qty=array();
$subtotalqty=0;
$idl="idl".$i;
$batch="batchl".$i."_0";
if (isset($_POST[$batch])) {
//shipment line with batch-enable product
$qty .= '_'.$j;
while (isset($_POST[$batch])) {
$sub_qty[$j]['q']=GETPOST($qty,'int');
$sub_qty[$j]['id_batch']=GETPOST($batch,'int');
$subtotalqty+=$sub_qty[$j]['q'];
$j++;
$batch="batchl".$i."_".$j;
$qty = "qtyl".$i.'_'.$j;
}
$batch_line[$i]['detail']=$sub_qty;
$batch_line[$i]['qty']=$subtotalqty;
$batch_line[$i]['ix_l']=GETPOST($idl,'int');
$totalqty+=$subtotalqty;
} else {
//Standard product
if (GETPOST($qty,'int') > 0) $totalqty+=GETPOST($qty,'int');
}
}
if ($totalqty > 0)
{
//var_dump($_POST);exit;
for ($i = 0; $i < $num; $i++)
{
$qty = "qtyl".$i;
if (! isset($batch_line[$i])) {
if (GETPOST($qty,'int') > 0 || (GETPOST($qty,'int') == 0 && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS))
{
$ent = "entl".$i;
$idl = "idl".$i;
$entrepot_id = is_numeric(GETPOST($ent,'int'))?GETPOST($ent,'int'):GETPOST('entrepot_id','int');
if ($entrepot_id < 0) $entrepot_id='';
$ret=$object->addline($entrepot_id,GETPOST($idl,'int'),GETPOST($qty,'int'));
if ($ret < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
} else {
if ($batch_line[$i]['qty']>0) {
$ret=$object->addline_batch($batch_line[$i]);
if ($ret < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
}
}
if (! $error)
{
$ret=$object->create($user);
if ($ret <= 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
}
else
{
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Qty")).'</div>';
$error++;
}
if (! $error)
{
$db->commit();
header("Location: card.php?id=".$object->id);
exit;
}
else
{
$db->rollback();
$_GET["commande_id"]=GETPOST('commande_id','int');
$action='create';
}
}
/*
* Build a receiving receipt
*/
else if ($action == 'create_delivery' && $conf->livraison_bon->enabled && $user->rights->expedition->livraison->creer)
{
$result = $object->create_delivery($user);
if ($result > 0)
{
header("Location: ".DOL_URL_ROOT.'/livraison/card.php?id='.$result);
exit;
}
else
{
$mesg=$object->error;
}
}
else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->expedition->valider)
{
$object->fetch_thirdparty();
$result = $object->valid($user);
if ($result < 0)
{
$langs->load("errors");
setEventMessage($langs->trans($object->error),'errors');
}
else
{
// Define output language
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
{
$outputlangs = $langs;
$newlang = '';
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
$outputlangs = new Translate("", $conf);
$outputlangs->setDefaultLang($newlang);
}
$model=$object->modelpdf;
$ret = $object->fetch($id); // Reload to get new records
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
if ($result < 0) dol_print_error($db,$result);
}
}
}
else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expedition->supprimer)
{
$result = $object->delete();
if ($result > 0)
{
header("Location: ".DOL_URL_ROOT.'/expedition/index.php');
exit;
}
else
{ {
$langs->load("errors"); $error=0;
setEventMessage($langs->trans($object->error),'errors');
}
}
else if ($action == 'reopen' && $user->rights->expedition->valider) $db->begin();
{
$result = $object->setStatut(0);
if ($result < 0)
{
$mesg = $object->error;
}
}
else if ($action == 'setdate_livraison' && $user->rights->expedition->creer) $object->note = GETPOST('note','alpha');
{ $object->origin = $origin;
//print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $object->origin_id = $origin_id;
$datedelivery=dol_mktime(GETPOST('liv_hour','int'), GETPOST('liv_min','int'), 0, GETPOST('liv_month','int'), GETPOST('liv_day','int'), GETPOST('liv_year','int')); $object->weight = GETPOST('weight','int')==''?"NULL":GETPOST('weight','int');
$object->sizeH = GETPOST('sizeH','int')==''?"NULL":GETPOST('sizeH','int');
$object->sizeW = GETPOST('sizeW','int')==''?"NULL":GETPOST('sizeW','int');
$object->sizeS = GETPOST('sizeS','int')==''?"NULL":GETPOST('sizeS','int');
$object->size_units = GETPOST('size_units','int');
$object->weight_units = GETPOST('weight_units','int');
$object->fetch($id); $date_delivery = dol_mktime(GETPOST('date_deliveryhour','int'), GETPOST('date_deliverymin','int'), 0, GETPOST('date_deliverymonth','int'), GETPOST('date_deliveryday','int'), GETPOST('date_deliveryyear','int'));
$result=$object->set_date_livraison($user,$datedelivery);
if ($result < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
}
}
// Action update description of emailing // On va boucler sur chaque ligne du document d'origine pour completer objet expedition
else if ($action == 'settrackingnumber' || $action == 'settrackingurl' // avec info diverses + qte a livrer
|| $action == 'settrueWeight' $classname = ucfirst($object->origin);
|| $action == 'settrueWidth' $objectsrc = new $classname($db);
|| $action == 'settrueHeight' $objectsrc->fetch($object->origin_id);
|| $action == 'settrueDepth'
|| $action == 'setshipping_method_id')
{
$error=0;
if ($action == 'settrackingnumber') $object->tracking_number = trim(GETPOST('trackingnumber','alpha')); $object->socid = $objectsrc->socid;
if ($action == 'settrackingurl') $object->tracking_url = trim(GETPOST('trackingurl','int')); $object->ref_customer = $objectsrc->ref_client;
if ($action == 'settrueWeight') { $object->date_delivery = $date_delivery; // Date delivery planed
$object->trueWeight = trim(GETPOST('trueWeight','int')); $object->fk_delivery_address = $objectsrc->fk_delivery_address;
$object->weight_units = GETPOST('weight_units','int'); $object->shipping_method_id = GETPOST('shipping_method_id','int');
} $object->tracking_number = GETPOST('tracking_number','alpha');
if ($action == 'settrueWidth') $object->trueWidth = trim(GETPOST('trueWidth','int')); $object->ref_int = GETPOST('ref_int','alpha');
if ($action == 'settrueHeight'){ $object->note_private = GETPOST('note_private');
$object->trueHeight = trim(GETPOST('trueHeight','int')); $object->note_public = GETPOST('note_public');
$object->size_units = GETPOST('size_units','int');
$num=count($objectsrc->lines);
$totalqty=0;
for ($i = 0; $i < $num; $i++)
{
$qty = "qtyl".$i;
$j=0;
$sub_qty=array();
$subtotalqty=0;
$idl="idl".$i;
$batch="batchl".$i."_0";
if (isset($_POST[$batch])) {
//shipment line with batch-enable product
$qty .= '_'.$j;
while (isset($_POST[$batch])) {
$sub_qty[$j]['q']=GETPOST($qty,'int');
$sub_qty[$j]['id_batch']=GETPOST($batch,'int');
$subtotalqty+=$sub_qty[$j]['q'];
$j++;
$batch="batchl".$i."_".$j;
$qty = "qtyl".$i.'_'.$j;
}
$batch_line[$i]['detail']=$sub_qty;
$batch_line[$i]['qty']=$subtotalqty;
$batch_line[$i]['ix_l']=GETPOST($idl,'int');
$totalqty+=$subtotalqty;
} else {
//Standard product
if (GETPOST($qty,'int') > 0) $totalqty+=GETPOST($qty,'int');
}
}
if ($totalqty > 0)
{
//var_dump($_POST);exit;
for ($i = 0; $i < $num; $i++)
{
$qty = "qtyl".$i;
if (! isset($batch_line[$i])) {
if (GETPOST($qty,'int') > 0 || (GETPOST($qty,'int') == 0 && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS))
{
$ent = "entl".$i;
$idl = "idl".$i;
$entrepot_id = is_numeric(GETPOST($ent,'int'))?GETPOST($ent,'int'):GETPOST('entrepot_id','int');
if ($entrepot_id < 0) $entrepot_id='';
$ret=$object->addline($entrepot_id,GETPOST($idl,'int'),GETPOST($qty,'int'));
if ($ret < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
} else {
if ($batch_line[$i]['qty']>0) {
$ret=$object->addline_batch($batch_line[$i]);
if ($ret < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
}
}
if (! $error)
{
$ret=$object->create($user);
if ($ret <= 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
$error++;
}
}
}
else
{
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Qty")).'</div>';
$error++;
}
if (! $error)
{
$db->commit();
header("Location: card.php?id=".$object->id);
exit;
}
else
{
$db->rollback();
$_GET["commande_id"]=GETPOST('commande_id','int');
$action='create';
}
} }
if ($action == 'settrueDepth') $object->trueDepth = trim(GETPOST('trueDepth','int'));
if ($action == 'setshipping_method_id') $object->shipping_method_id = trim(GETPOST('shipping_method_id','int'));
if (! $error) /*
{ * Build a receiving receipt
if ($object->update($user) >= 0) */
{ else if ($action == 'create_delivery' && $conf->livraison_bon->enabled && $user->rights->expedition->livraison->creer)
header("Location: card.php?id=".$object->id); {
exit; $result = $object->create_delivery($user);
} if ($result > 0)
setEventMessage($object->error,'errors'); {
} header("Location: ".DOL_URL_ROOT.'/livraison/card.php?id='.$result);
exit;
}
else
{
$mesg=$object->error;
}
}
$action=""; else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->expedition->valider)
} {
$object->fetch_thirdparty();
// Build document $result = $object->valid($user);
else if ($action == 'builddoc') // En get ou en post
{
// Save last template used to generate document if ($result < 0)
if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha')); {
$langs->load("errors");
setEventMessage($langs->trans($object->error),'errors');
}
else
{
// Define output language
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
{
$outputlangs = $langs;
$newlang = '';
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
$outputlangs = new Translate("", $conf);
$outputlangs->setDefaultLang($newlang);
}
$model=$object->modelpdf;
$ret = $object->fetch($id); // Reload to get new records
// Define output language $result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
$outputlangs = $langs; if ($result < 0) dol_print_error($db,$result);
$newlang=''; }
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id','alpha'); }
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$shipment->client->default_lang; }
if (! empty($newlang))
{
$outputlangs = new Translate("",$conf);
$outputlangs->setDefaultLang($newlang);
}
$result = $object->generateDocument($object->modelpdf, $outputlangs);
if ($result <= 0)
{
dol_print_error($db,$result);
exit;
}
}
// Delete file in doc form else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expedition->supprimer)
elseif ($action == 'remove_file') {
{ $result = $object->delete();
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; if ($result > 0)
{
header("Location: ".DOL_URL_ROOT.'/expedition/index.php');
exit;
}
else
{
$langs->load("errors");
setEventMessage($langs->trans($object->error),'errors');
}
}
$upload_dir = $conf->expedition->dir_output . "/sending"; else if ($action == 'reopen' && $user->rights->expedition->valider)
$file = $upload_dir . '/' . GETPOST('file'); {
$ret=dol_delete_file($file,0,0,0,$object); $result = $object->setStatut(0);
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile'))); if ($result < 0)
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors'); {
} $mesg = $object->error;
}
}
/* else if ($action == 'setdate_livraison' && $user->rights->expedition->creer)
* Add file in email form {
*/ //print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year'];
if (GETPOST('addfile','alpha')) $datedelivery=dol_mktime(GETPOST('liv_hour','int'), GETPOST('liv_min','int'), 0, GETPOST('liv_month','int'), GETPOST('liv_day','int'), GETPOST('liv_year','int'));
{
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
// Set tmp user directory TODO Use a dedicated directory for temp mails files $object->fetch($id);
$vardir=$conf->user->dir_output."/".$user->id; $result=$object->set_date_livraison($user,$datedelivery);
$upload_dir_tmp = $vardir.'/temp'; if ($result < 0)
{
$mesg='<div class="error">'.$object->error.'</div>';
}
}
dol_add_file_process($upload_dir_tmp,0,0); // Action update description of emailing
$action ='presend'; else if ($action == 'settrackingnumber' || $action == 'settrackingurl'
} || $action == 'settrueWeight'
|| $action == 'settrueWidth'
|| $action == 'settrueHeight'
|| $action == 'settrueDepth'
|| $action == 'setshipping_method_id')
{
$error=0;
/* if ($action == 'settrackingnumber') $object->tracking_number = trim(GETPOST('trackingnumber','alpha'));
* Remove file in email form if ($action == 'settrackingurl') $object->tracking_url = trim(GETPOST('trackingurl','int'));
*/ if ($action == 'settrueWeight') {
if (GETPOST('removedfile','alpha')) $object->trueWeight = trim(GETPOST('trueWeight','int'));
{ $object->weight_units = GETPOST('weight_units','int');
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; }
if ($action == 'settrueWidth') $object->trueWidth = trim(GETPOST('trueWidth','int'));
if ($action == 'settrueHeight'){
$object->trueHeight = trim(GETPOST('trueHeight','int'));
$object->size_units = GETPOST('size_units','int');
}
if ($action == 'settrueDepth') $object->trueDepth = trim(GETPOST('trueDepth','int'));
if ($action == 'setshipping_method_id') $object->shipping_method_id = trim(GETPOST('shipping_method_id','int'));
// Set tmp user directory if (! $error)
$vardir=$conf->user->dir_output."/".$user->id; {
$upload_dir_tmp = $vardir.'/temp'; if ($object->update($user) >= 0)
{
header("Location: card.php?id=".$object->id);
exit;
}
setEventMessage($object->error,'errors');
}
// TODO Delete only files that was uploaded from email form $action="";
dol_remove_file_process(GETPOST('removedfile','int'),0); }
$action ='presend';
}
/* // Build document
* Send mail else if ($action == 'builddoc') // En get ou en post
*/ {
if ($action == 'send' && ! GETPOST('addfile','alpha') && ! GETPOST('removedfile','alpha') && ! GETPOST('cancel','alpha'))
{
$langs->load('mails');
// $ref = dol_sanitizeFileName($object->ref); // Save last template used to generate document
// $file = $conf->expedition->dir_output . '/sending/' . $ref . '/' . $ref . '.pdf'; if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
// if (is_readable($file)) // Define output language
// { $outputlangs = $langs;
if (GETPOST('sendto','alpha')) $newlang='';
{ if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id','alpha');
// Le destinataire a ete fourni via le champ libre if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$shipment->client->default_lang;
$sendto = GETPOST('sendto','alpha'); if (! empty($newlang))
$sendtoid = 0; {
} $outputlangs = new Translate("",$conf);
elseif (GETPOST('receiver','alpha') != '-1') $outputlangs->setDefaultLang($newlang);
{ }
// Recipient was provided from combo list $result = $object->generateDocument($object->modelpdf, $outputlangs);
if (GETPOST('receiver','alpha') == 'thirdparty') // Id of third party if ($result <= 0)
{ {
$sendto = $object->client->email; dol_print_error($db,$result);
$sendtoid = 0; exit;
} }
else // Id du contact }
{
$sendto = $object->client->contact_get_property(GETPOST('receiver','alpha'),'email');
$sendtoid = GETPOST('receiver','alpha');
}
}
if (dol_strlen($sendto)) // Delete file in doc form
{ elseif ($action == 'remove_file')
$langs->load("commercial"); {
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
$from = GETPOST('fromname','alpha') . ' <' . GETPOST('frommail','alpha') .'>'; $upload_dir = $conf->expedition->dir_output . "/sending";
$replyto = GETPOST('replytoname','alpha'). ' <' . GETPOST('replytomail','alpha').'>'; $file = $upload_dir . '/' . GETPOST('file');
$message = GETPOST('message'); $ret=dol_delete_file($file,0,0,0,$object);
$sendtocc = GETPOST('sendtocc','alpha'); if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
$deliveryreceipt = GETPOST('deliveryreceipt','alpha'); else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
}
if ($action == 'send') /*
{ * Add file in email form
if (dol_strlen(GETPOST('subject','alpha'))) $subject=GETPOST('subject','alpha'); */
else $subject = $langs->transnoentities('Shipping').' '.$object->ref; if (GETPOST('addfile','alpha'))
$actiontypecode='AC_SHIP'; {
$actionmsg = $langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
if ($message)
{
if ($sendtocc) $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
$actionmsg = dol_concatdesc($actionmsg, $message);
}
$actionmsg2=$langs->transnoentities('Action'.$actiontypecode);
}
// Create form object // Set tmp user directory TODO Use a dedicated directory for temp mails files
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; $vardir=$conf->user->dir_output."/".$user->id;
$formmail = new FormMail($db); $upload_dir_tmp = $vardir.'/temp';
$attachedfiles=$formmail->get_attached_files(); dol_add_file_process($upload_dir_tmp,0,0);
$filepath = $attachedfiles['paths']; $action ='presend';
$filename = $attachedfiles['names']; }
$mimetype = $attachedfiles['mimes'];
// Send mail /*
require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; * Remove file in email form
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1); */
if ($mailfile->error) if (GETPOST('removedfile','alpha'))
{ {
$mesg='<div class="error">'.$mailfile->error.'</div>'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
}
else
{
$result=$mailfile->sendfile();
if ($result)
{
$error=0;
// Initialisation donnees // Set tmp user directory
$object->sendtoid = $sendtoid; $vardir=$conf->user->dir_output."/".$user->id;
$object->actiontypecode = $actiontypecode; $upload_dir_tmp = $vardir.'/temp';
$object->actionmsg = $actionmsg;
$object->actionmsg2 = $actionmsg2;
$object->fk_element = $object->id;
$object->elementtype = $object->element;
// Appel des triggers // TODO Delete only files that was uploaded from email form
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; dol_remove_file_process(GETPOST('removedfile','int'),0);
$interface=new Interfaces($db); $action ='presend';
$result=$interface->run_triggers('SHIPPING_SENTBYMAIL',$object,$user,$langs,$conf); }
if ($result < 0) {
$error++; $object->errors=$interface->errors;
}
// Fin appel triggers
if ($error) /*
{ * Send mail
dol_print_error($db); */
} if ($action == 'send' && ! GETPOST('addfile','alpha') && ! GETPOST('removedfile','alpha') && ! GETPOST('cancel','alpha'))
else {
{ $langs->load('mails');
// Redirect here
// This avoid sending mail twice if going out and then back to page
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2));
setEventMessage($mesg);
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
exit;
}
}
else
{
$langs->load("other");
$mesg='<div class="error">';
if ($mailfile->error)
{
$mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto);
$mesg.='<br>'.$mailfile->error;
}
else
{
$mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
}
$mesg.='</div>';
}
}
}
else
{
$langs->load("other");
$mesg='<div class="error">'.$langs->trans('ErrorMailRecipientIsEmpty').' !</div>';
$action='presend';
dol_syslog('Recipient email is empty');
}
/* }
else
{
$langs->load("errors");
$mesg='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>';
dol_syslog('Failed to read file: '.$file);
}*/
}
else if ($action == 'classifybilled') if (GETPOST('sendto','alpha'))
{ {
$object->fetch($id); // Le destinataire a ete fourni via le champ libre
$object->set_billed(); $sendto = GETPOST('sendto','alpha');
$sendtoid = 0;
}
elseif (GETPOST('receiver','alpha') != '-1')
{
// Recipient was provided from combo list
if (GETPOST('receiver','alpha') == 'thirdparty') // Id of third party
{
$sendto = $object->client->email;
$sendtoid = 0;
}
else // Id du contact
{
$sendto = $object->client->contact_get_property(GETPOST('receiver','alpha'),'email');
$sendtoid = GETPOST('receiver','alpha');
}
}
if (dol_strlen($sendto))
{
$langs->load("commercial");
$from = GETPOST('fromname','alpha') . ' <' . GETPOST('frommail','alpha') .'>';
$replyto = GETPOST('replytoname','alpha'). ' <' . GETPOST('replytomail','alpha').'>';
$message = GETPOST('message');
$sendtocc = GETPOST('sendtocc','alpha');
$deliveryreceipt = GETPOST('deliveryreceipt','alpha');
if ($action == 'send')
{
if (dol_strlen(GETPOST('subject','alpha'))) $subject=GETPOST('subject','alpha');
else $subject = $langs->transnoentities('Shipping').' '.$object->ref;
$actiontypecode='AC_SHIP';
$actionmsg = $langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto;
if ($message)
{
if ($sendtocc) $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
$actionmsg = dol_concatdesc($actionmsg, $message);
}
$actionmsg2=$langs->transnoentities('Action'.$actiontypecode);
}
// Create form object
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
$formmail = new FormMail($db);
$attachedfiles=$formmail->get_attached_files();
$filepath = $attachedfiles['paths'];
$filename = $attachedfiles['names'];
$mimetype = $attachedfiles['mimes'];
// Send mail
require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1);
if ($mailfile->error)
{
$mesg='<div class="error">'.$mailfile->error.'</div>';
}
else
{
$result=$mailfile->sendfile();
if ($result)
{
$error=0;
// Initialisation donnees
$object->sendtoid = $sendtoid;
$object->actiontypecode = $actiontypecode;
$object->actionmsg = $actionmsg;
$object->actionmsg2 = $actionmsg2;
$object->fk_element = $object->id;
$object->elementtype = $object->element;
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($db);
$result=$interface->run_triggers('SHIPPING_SENTBYMAIL',$object,$user,$langs,$conf);
if ($result < 0) {
$error++; $object->errors=$interface->errors;
}
// Fin appel triggers
if ($error)
{
dol_print_error($db);
}
else
{
// Redirect here
// This avoid sending mail twice if going out and then back to page
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2));
setEventMessage($mesg);
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
exit;
}
}
else
{
$langs->load("other");
$mesg='<div class="error">';
if ($mailfile->error)
{
$mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto);
$mesg.='<br>'.$mailfile->error;
}
else
{
$mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
}
$mesg.='</div>';
}
}
}
else
{
$langs->load("other");
$mesg='<div class="error">'.$langs->trans('ErrorMailRecipientIsEmpty').' !</div>';
$action='presend';
dol_syslog('Recipient email is empty');
}
}
else if ($action == 'classifybilled')
{
$object->fetch($id);
$object->set_billed();
}
} }

View File

@ -121,21 +121,30 @@ class Expedition extends CommonObject
global $db, $langs, $conf; global $db, $langs, $conf;
$langs->load("sendings"); $langs->load("sendings");
$dir = DOL_DOCUMENT_ROOT . "/core/modules/expedition"; if (!empty($conf->global->EXPEDITION_ADDON_NUMBER))
if (empty($conf->global->EXPEDITION_ADDON_NUMBER))
{ {
$conf->global->EXPEDITION_ADDON_NUMBER='mod_expedition_safor'; $mybool = false;
}
$file = $conf->global->EXPEDITION_ADDON_NUMBER.".php"; $file = $conf->global->EXPEDITION_ADDON_NUMBER.".php";
$classname = $conf->global->EXPEDITION_ADDON_NUMBER;
// Chargement de la classe de numerotation // Include file with class
$classname = $conf->global->EXPEDITION_ADDON_NUMBER; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/expedition/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
if (! $mybool)
{
dol_print_error('',"Failed to include file ".$file);
return '';
}
$result=include_once $dir.'/'.$file;
if ($result)
{
$obj = new $classname(); $obj = new $classname();
$numref = ""; $numref = "";
$numref = $obj->getNextValue($soc,$this); $numref = $obj->getNextValue($soc,$this);
@ -149,12 +158,12 @@ class Expedition extends CommonObject
dol_print_error($db,get_class($this)."::getNextNumRef ".$obj->error); dol_print_error($db,get_class($this)."::getNextNumRef ".$obj->error);
return ""; return "";
} }
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_NUMBER_NotDefined"); print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_NUMBER_NotDefined");
return ""; return "";
} }
} }
/** /**

View File

@ -585,25 +585,33 @@ class Fichinter extends CommonObject
global $conf, $db, $langs; global $conf, $db, $langs;
$langs->load("interventions"); $langs->load("interventions");
$dir = DOL_DOCUMENT_ROOT . "/core/modules/fichinter/";
if (! empty($conf->global->FICHEINTER_ADDON)) if (! empty($conf->global->FICHEINTER_ADDON))
{ {
$file = $conf->global->FICHEINTER_ADDON.".php"; $mybool = false;
$classname = $conf->global->FICHEINTER_ADDON;
if (! file_exists($dir.$file)) $file = "mod_".$conf->global->FICHEINTER_ADDON.".php";
{ $classname = "mod_".$conf->global->FICHEINTER_ADDON;
$file='mod_'.$file;
$classname='mod_'.$classname; // Include file with class
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/fichinter/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
} }
// Chargement de la classe de numerotation if (! $mybool)
require_once $dir.$file; {
dol_print_error('',"Failed to include file ".$file);
return '';
}
$obj = new $classname(); $obj = new $classname();
$numref = ""; $numref = "";
$numref = $obj->getNumRef($soc,$this); $numref = $obj->getNextValue($soc,$this);
if ( $numref != "") if ( $numref != "")
{ {
@ -617,6 +625,7 @@ class Fichinter extends CommonObject
} }
else else
{ {
$langs->load("errors");
print $langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined"); print $langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined");
return ""; return "";
} }

View File

@ -60,34 +60,37 @@ $parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if ($action == 'setsupplieraccountancycode') if (empty($reshook))
{ {
$cancelbutton = GETPOST('cancel'); if ($action == 'setsupplieraccountancycode')
if (! $cancelbutton)
{ {
$result=$object->fetch($id); $cancelbutton = GETPOST('cancel');
$object->code_compta_fournisseur=$_POST["supplieraccountancycode"]; if (! $cancelbutton)
$result=$object->update($object->id,$user,1,0,1); {
if ($result < 0) $result=$object->fetch($id);
{ $object->code_compta_fournisseur=$_POST["supplieraccountancycode"];
$mesg=join(',',$object->errors); $result=$object->update($object->id,$user,1,0,1);
} if ($result < 0)
{
$mesg=join(',',$object->errors);
}
}
$action="";
}
// conditions de reglement
if ($action == 'setconditions' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentTerms(GETPOST('cond_reglement_supplier_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
}
// mode de reglement
if ($action == 'setmode' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentMethods(GETPOST('mode_reglement_supplier_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
} }
$action="";
}
// conditions de reglement
if ($action == 'setconditions' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentTerms(GETPOST('cond_reglement_supplier_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
}
// mode de reglement
if ($action == 'setmode' && $user->rights->societe->creer)
{
$object->fetch($id);
$result=$object->setPaymentMethods(GETPOST('mode_reglement_supplier_id','int'));
if ($result < 0) dol_print_error($db,$object->error);
} }

View File

@ -557,44 +557,48 @@ class CommandeFournisseur extends CommonOrder
global $db, $langs, $conf; global $db, $langs, $conf;
$langs->load("orders"); $langs->load("orders");
$dir = DOL_DOCUMENT_ROOT .'/core/modules/supplier_order/';
if (! empty($conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER)) if (! empty($conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER))
{ {
$mybool = false;
$file = $conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER.'.php'; $file = $conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER.'.php';
$classname=$conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER;
if (is_readable($dir.'/'.$file)) // Include file with class
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/supplier_order/");
// Load file with numbering class (if found)
$mybool|=@include_once $dir.$file;
}
if (! $mybool)
{ {
// Definition du nom de modele de numerotation de commande fournisseur dol_print_error('',"Failed to include file ".$file);
$modName=$conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER; return '';
require_once $dir.'/'.$file; }
// Recuperation de la nouvelle reference $obj = new $classname();
$objMod = new $modName($this->db); $numref = $obj->getNextValue($soc,$this);
$numref = ""; if ( $numref != "")
$numref = $objMod->commande_get_num($soc,$this); {
return $numref;
if ( $numref != "")
{
return $numref;
}
else
{
dol_print_error($db, get_class($this)."::getNextNumRef ".$obj->error);
return -1;
}
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("Error_FailedToLoad_COMMANDE_SUPPLIER_ADDON_File",$conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER); $this->error = $obj->error;
return -2; dol_print_error($db, get_class($this)."::getNextNumRef ".$obj->error);
return -1;
} }
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_SUPPLIER_ADDON_NotDefined"); $this->error = "Error_COMMANDE_SUPPLIER_ADDON_NotDefined";
return -3; return -2;
} }
} }

View File

@ -1514,10 +1514,14 @@ class FactureFournisseur extends CommonInvoice
$file = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER.".php"; $file = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER.".php";
$classname = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER; $classname = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER;
// Include file with class // Include file with class
foreach ($conf->file->dol_document_root as $dirroot) $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
{
$dir = $dirroot."/core/modules/supplier_invoice/"; foreach ($dirmodels as $reldir) {
$dir = dol_buildpath($reldir."core/modules/supplier_invoice/");
// Load file with numbering class (if found) // Load file with numbering class (if found)
$mybool|=@include_once $dir.$file; $mybool|=@include_once $dir.$file;
} }

View File

@ -66,169 +66,172 @@ if ($user->societe_id > 0)
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('paymentsupplier')); $hookmanager->initHooks(array('paymentsupplier'));
$parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
/* /*
* Actions * Actions
*/ */
if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes')) $parameters=array('socid'=>$socid);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook))
{ {
$error = 0; if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm=='yes'))
{
$error = 0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
$paiement_id = 0; $paiement_id = 0;
$totalpayment = 0; $totalpayment = 0;
$atleastonepaymentnotnull = 0; $atleastonepaymentnotnull = 0;
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date // Generate payment array and check if there is payment higher than invoice and payment date before invoice date
$tmpinvoice=new FactureFournisseur($db); $tmpinvoice=new FactureFournisseur($db);
foreach ($_POST as $key => $value) foreach ($_POST as $key => $value)
{ {
if (substr($key,0,7) == 'amount_') if (substr($key,0,7) == 'amount_')
{ {
$cursorfacid = substr($key,7); $cursorfacid = substr($key,7);
$amounts[$cursorfacid] = price2num(trim(GETPOST($key))); $amounts[$cursorfacid] = price2num(trim(GETPOST($key)));
$totalpayment = $totalpayment + $amounts[$cursorfacid]; $totalpayment = $totalpayment + $amounts[$cursorfacid];
if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++; if (! empty($amounts[$cursorfacid])) $atleastonepaymentnotnull++;
$result=$tmpinvoice->fetch($cursorfacid); $result=$tmpinvoice->fetch($cursorfacid);
if ($result <= 0) dol_print_error($db); if ($result <= 0) dol_print_error($db);
$amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement()); $amountsresttopay[$cursorfacid]=price2num($tmpinvoice->total_ttc - $tmpinvoice->getSommePaiement());
if ($amounts[$cursorfacid]) if ($amounts[$cursorfacid])
{
// Check amount
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{ {
$addwarning=1; // Check amount
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPaySupplier")).' '.$langs->trans("HelpPaymentHigherThanReminderToPaySupplier"); if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
$addwarning=1;
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPaySupplier")).' '.$langs->trans("HelpPaymentHigherThanReminderToPaySupplier");
}
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date))
{
$langs->load("errors");
//$error++;
setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
}
} }
// Check date
if ($datepaye && ($datepaye < $tmpinvoice->date)) $formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]);
}
}
// Check parameters
if ($_POST['paiementid'] <= 0)
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
$error++;
}
if (! empty($conf->banque->enabled))
{
// If bank module is on, account is required to enter a payment
if (GETPOST('accountid') <= 0)
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
$error++;
}
}
if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
$error++;
}
if (empty($datepaye))
{
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
$error++;
}
}
/*
* Action add_paiement
*/
if ($action == 'add_paiement')
{
if ($error)
{
$action = 'create';
}
// Le reste propre a cette action s'affiche en bas de page.
}
/*
* Action confirm_paiement
*/
if ($action == 'confirm_paiement' && $confirm == 'yes')
{
$error=0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
if (! $error)
{
$db->begin();
// Creation de la ligne paiement
$paiement = new PaiementFourn($db);
$paiement->datepaye = $datepaye;
$paiement->amounts = $amounts; // Array of amounts
$paiement->paiementid = $_POST['paiementid'];
$paiement->num_paiement = $_POST['num_paiement'];
$paiement->note = $_POST['comment'];
if (! $error)
{
$paiement_id = $paiement->create($user,(GETPOST('closepaidinvoices')=='on'?1:0));
if ($paiement_id < 0)
{ {
$langs->load("errors"); setEventMessage($paiement->error, 'errors');
//$error++; $error++;
setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
} }
} }
$formquestion[$i++]=array('type' => 'hidden','name' => $key, 'value' => $_POST[$key]); if (! $error)
} {
} $result=$paiement->addPaymentToBank($user,'payment_supplier','(SupplierInvoicePayment)',$_POST['accountid'],'','');
if ($result < 0)
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
// Check parameters if (! $error)
if ($_POST['paiementid'] <= 0) {
{ $db->commit();
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
$error++;
}
if (! empty($conf->banque->enabled)) // If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card
{ $invoiceid=0;
// If bank module is on, account is required to enter a payment foreach ($paiement->amounts as $key => $amount)
if (GETPOST('accountid') <= 0) {
{ $facid = $key;
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors'); if (is_numeric($amount) && $amount <> 0)
$error++; {
} if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment
} else $invoiceid=$facid;
}
if (empty($totalpayment) && empty($atleastonepaymentnotnull)) }
{ if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$invoiceid;
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors'); else $loc = DOL_URL_ROOT.'/fourn/paiement/card.php?id='.$paiement_id;
$error++; header('Location: '.$loc);
} exit;
}
if (empty($datepaye)) else
{ {
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors'); $db->rollback();
$error++; }
} }
}
} }
/*
* Action add_paiement
*/
if ($action == 'add_paiement')
{
if ($error)
{
$action = 'create';
}
// Le reste propre a cette action s'affiche en bas de page.
}
/*
* Action confirm_paiement
*/
if ($action == 'confirm_paiement' && $confirm == 'yes')
{
$error=0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
if (! $error)
{
$db->begin();
// Creation de la ligne paiement
$paiement = new PaiementFourn($db);
$paiement->datepaye = $datepaye;
$paiement->amounts = $amounts; // Array of amounts
$paiement->paiementid = $_POST['paiementid'];
$paiement->num_paiement = $_POST['num_paiement'];
$paiement->note = $_POST['comment'];
if (! $error)
{
$paiement_id = $paiement->create($user,(GETPOST('closepaidinvoices')=='on'?1:0));
if ($paiement_id < 0)
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error)
{
$result=$paiement->addPaymentToBank($user,'payment_supplier','(SupplierInvoicePayment)',$_POST['accountid'],'','');
if ($result < 0)
{
setEventMessage($paiement->error, 'errors');
$error++;
}
}
if (! $error)
{
$db->commit();
// If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card
$invoiceid=0;
foreach ($paiement->amounts as $key => $amount)
{
$facid = $key;
if (is_numeric($amount) && $amount <> 0)
{
if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment
else $invoiceid=$facid;
}
}
if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$invoiceid;
else $loc = DOL_URL_ROOT.'/fourn/paiement/card.php?id='.$paiement_id;
header('Location: '.$loc);
exit;
}
else
{
$db->rollback();
}
}
}
/* /*
* View * View
@ -458,7 +461,7 @@ if (empty($action))
$search_paymenttype=GETPOST('search_paymenttype'); $search_paymenttype=GETPOST('search_paymenttype');
$search_amount=GETPOST('search_amount'); $search_amount=GETPOST('search_amount');
$search_company=GETPOST('search_company'); $search_company=GETPOST('search_company');
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
{ {
$search_ref=""; $search_ref="";
@ -596,7 +599,7 @@ if (empty($action))
print '<td class="nowrap">'; print '<td class="nowrap">';
print $invoicesupplierstatic->getNomUrl(1); print $invoicesupplierstatic->getNomUrl(1);
print '</td>';*/ print '</td>';*/
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '</tr>'; print '</tr>';
$i++; $i++;

View File

@ -1033,7 +1033,7 @@ SendingMailSetup=Setup of sendings by email
SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba). SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
PathToDocuments=Path to documents PathToDocuments=Path to documents
PathDirectory=Directory PathDirectory=Directory
SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by thoose bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommanded) is to use the method "SMTP socket library" that has no disadvantages. SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
TranslationSetup=Configuration de la traduction TranslationSetup=Configuration de la traduction
TranslationDesc=Choice of language visible on screen can be modified:<br>* Globally from menu <strong>Home - Setup - Display</strong><br>* For user only from tab <strong>User display</strong> of user card (click on login on top of screen). TranslationDesc=Choice of language visible on screen can be modified:<br>* Globally from menu <strong>Home - Setup - Display</strong><br>* For user only from tab <strong>User display</strong> of user card (click on login on top of screen).
TotalNumberOfActivatedModules=Total number of activated feature modules: <b>%s</b> TotalNumberOfActivatedModules=Total number of activated feature modules: <b>%s</b>
@ -1410,7 +1410,7 @@ AdvancedEditor=Advanced editor
ActivateFCKeditor=Activate advanced editor for: ActivateFCKeditor=Activate advanced editor for:
FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services) FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommanded as it can create problems with special characters and page formating when building PDF files.</font> FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing) FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
FCKeditorForUserSignature=WYSIWIG creation/edition of user signature FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
FCKeditorForMail=WYSIWIG creation/edition for all mail (except Outils->eMailing) FCKeditorForMail=WYSIWIG creation/edition for all mail (except Outils->eMailing)

View File

@ -260,6 +260,7 @@ days=days
Hours=Hours Hours=Hours
Minutes=Minutes Minutes=Minutes
Seconds=Seconds Seconds=Seconds
Weeks=Weeks
Today=Today Today=Today
Yesterday=Yesterday Yesterday=Yesterday
Tomorrow=Tomorrow Tomorrow=Tomorrow

View File

@ -736,7 +736,7 @@ if ((! empty($conf->browser->layout) && $conf->browser->layout == 'phone')
// If we force to use jmobile, then we reenable javascript // If we force to use jmobile, then we reenable javascript
if (! empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax=1; if (! empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax=1;
// Replace themes bugged with jmobile with eldy // Replace themes bugged with jmobile with eldy
if (! empty($conf->dol_use_jmobile) && in_array($conf->theme,array('bureau2crea','cameleo'))) if (! empty($conf->dol_use_jmobile) && in_array($conf->theme,array('bureau2crea','cameleo','amarok')))
{ {
$conf->theme='eldy'; $conf->theme='eldy';
$conf->css = "/theme/".$conf->theme."/style.css.php"; $conf->css = "/theme/".$conf->theme."/style.css.php";

View File

@ -1,5 +1,6 @@
<?php <?php
/* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr> /* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
* *
* 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
@ -21,5 +22,15 @@
* \brief Page d'index du module margin * \brief Page d'index du module margin
*/ */
require 'productMargins.php'; require '../main.inc.php';
if ($user->rights->produit->lire) {
$page = 'productMargins';
} elseif ($user->rights->societe->lire) {
$page = 'customerMargins';
} else {
$page = 'agentMargins';
}
header('Location: '.dol_buildpath('/margin/'.$page.'.php', 1));

View File

@ -1,5 +1,6 @@
<?php <?php
/* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr> /* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
* *
* 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
@ -56,21 +57,25 @@ function marges_admin_prepare_head()
*/ */
function marges_prepare_head() function marges_prepare_head()
{ {
global $langs, $conf; global $langs, $conf, $user;
$langs->load("marges@marges"); $langs->load("marges@marges");
$h = 0; $h = 0;
$head = array(); $head = array();
$head[$h][0] = DOL_URL_ROOT."/margin/productMargins.php"; if ($user->rights->produit->lire) {
$head[$h][1] = $langs->trans("ProductMargins"); $head[$h][0] = DOL_URL_ROOT."/margin/productMargins.php";
$head[$h][2] = 'productMargins'; $head[$h][1] = $langs->trans("ProductMargins");
$h++; $head[$h][2] = 'productMargins';
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/margin/customerMargins.php"; if ($user->rights->societe->lire) {
$head[$h][1] = $langs->trans("CustomerMargins"); $head[$h][0] = DOL_URL_ROOT."/margin/customerMargins.php";
$head[$h][2] = 'customerMargins'; $head[$h][1] = $langs->trans("CustomerMargins");
$h++; $head[$h][2] = 'customerMargins';
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/margin/agentMargins.php"; $head[$h][0] = DOL_URL_ROOT."/margin/agentMargins.php";
$head[$h][1] = $langs->trans("SalesRepresentativeMargins"); $head[$h][1] = $langs->trans("SalesRepresentativeMargins");

View File

@ -73,16 +73,20 @@ if ($id > 0 || ! empty($ref))
} }
$modulepart='produit'; $modulepart='produit';
/*
* Actions
*/
$parameters=array('id'=>$id); $parameters=array('id'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook))
/* {
* Action envoie fichier // Action sending file
*/ include_once DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_pre_headers.tpl.php';
}
include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_pre_headers.tpl.php';
/* /*

View File

@ -78,124 +78,125 @@ $parameters=array('socid'=>$socid, 'id_prod'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if ($action == 'remove_pf') if (empty($reshook)) {
{ if ($action == 'remove_pf')
$product = new ProductFournisseur($db);
if ($product->fetch($id) > 0)
{ {
if ($rowid) $product = new ProductFournisseur($db);
if ($product->fetch($id) > 0)
{ {
$result=$product->remove_product_fournisseur_price($rowid); if ($rowid)
$action = ''; {
setEventMessage($langs->trans("PriceRemoved")); $result=$product->remove_product_fournisseur_price($rowid);
$action = '';
setEventMessage($langs->trans("PriceRemoved"));
}
} }
} }
}
if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel")) if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel"))
{ {
$id_fourn=GETPOST("id_fourn"); $id_fourn=GETPOST("id_fourn");
if (empty($id_fourn)) $id_fourn=GETPOST("search_id_fourn"); if (empty($id_fourn)) $id_fourn=GETPOST("search_id_fourn");
$ref_fourn=GETPOST("ref_fourn"); $ref_fourn=GETPOST("ref_fourn");
if (empty($ref_fourn)) $ref_fourn=GETPOST("search_ref_fourn"); if (empty($ref_fourn)) $ref_fourn=GETPOST("search_ref_fourn");
$quantity=GETPOST("qty"); $quantity=GETPOST("qty");
$remise_percent=price2num(GETPOST('remise_percent','alpha')); $remise_percent=price2num(GETPOST('remise_percent','alpha'));
$npr = preg_match('/\*/', $_POST['tva_tx']) ? 1 : 0 ; $npr = preg_match('/\*/', $_POST['tva_tx']) ? 1 : 0 ;
$tva_tx = str_replace('*','', GETPOST('tva_tx','alpha')); $tva_tx = str_replace('*','', GETPOST('tva_tx','alpha'));
$tva_tx = price2num($tva_tx); $tva_tx = price2num($tva_tx);
if ($tva_tx == '') if ($tva_tx == '')
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("VATRateForSupplierProduct")), 'errors');
}
if (empty($quantity))
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Qty")), 'errors');
}
if (empty($ref_fourn))
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("RefSupplier")), 'errors');
}
if ($id_fourn <= 0)
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Supplier")), 'errors');
}
if ($_POST["price"] < 0 || $_POST["price"] == '')
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Price")), 'errors');
}
$product = new ProductFournisseur($db);
$result=$product->fetch($id);
if ($result <= 0)
{
$error++;
setEventMessage($product->error, 'errors');
}
if (! $error)
{
$db->begin();
if (! $error)
{ {
$ret=$product->add_fournisseur($user, $id_fourn, $ref_fourn, $quantity); // This insert record with no value for price. Values are update later with update_buyprice $error++;
if ($ret == -3) setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("VATRateForSupplierProduct")), 'errors');
{ }
$error++; if (empty($quantity))
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Qty")), 'errors');
}
if (empty($ref_fourn))
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("RefSupplier")), 'errors');
}
if ($id_fourn <= 0)
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Supplier")), 'errors');
}
if ($_POST["price"] < 0 || $_POST["price"] == '')
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Price")), 'errors');
}
$product->fetch($product->product_id_already_linked); $product = new ProductFournisseur($db);
$productLink = $product->getNomUrl(1,'supplier'); $result=$product->fetch($id);
if ($result <= 0)
setEventMessage($langs->trans("ReferenceSupplierIsAlreadyAssociatedWithAProduct",$productLink), 'errors'); {
} $error++;
else if ($ret < 0) setEventMessage($product->error, 'errors');
{
$error++;
setEventMessage($product->error, 'errors');
}
} }
if (! $error) if (! $error)
{ {
$supplier=new Fournisseur($db); $db->begin();
$result=$supplier->fetch($id_fourn);
if (isset($_POST['ref_fourn_price_id']))
$product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']);
$ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, $npr); if (! $error)
if ($ret < 0)
{ {
$error++; $ret=$product->add_fournisseur($user, $id_fourn, $ref_fourn, $quantity); // This insert record with no value for price. Values are update later with update_buyprice
setEventMessage($product->error, 'errors'); if ($ret == -3)
{
$error++;
$product->fetch($product->product_id_already_linked);
$productLink = $product->getNomUrl(1,'supplier');
setEventMessage($langs->trans("ReferenceSupplierIsAlreadyAssociatedWithAProduct",$productLink), 'errors');
}
else if ($ret < 0)
{
$error++;
setEventMessage($product->error, 'errors');
}
}
if (! $error)
{
$supplier=new Fournisseur($db);
$result=$supplier->fetch($id_fourn);
if (isset($_POST['ref_fourn_price_id']))
$product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']);
$ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, $npr);
if ($ret < 0)
{
$error++;
setEventMessage($product->error, 'errors');
}
}
if (! $error)
{
$db->commit();
$action='';
}
else
{
$db->rollback();
} }
} }
}
if (! $error) if (GETPOST('cancel') == $langs->trans("Cancel"))
{ {
$db->commit(); $action = '';
$action=''; header("Location: fournisseurs.php?id=".$_GET["id"]);
} exit;
else }
{
$db->rollback();
}
}
} }
if (GETPOST('cancel') == $langs->trans("Cancel"))
{
$action = '';
header("Location: fournisseurs.php?id=".$_GET["id"]);
exit;
}
/* /*
* view * view
@ -393,7 +394,7 @@ if ($id || $ref)
print '</tr>'; print '</tr>';
} }
} }
if (is_object($hookmanager)) if (is_object($hookmanager))
{ {
$parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$product->id); $parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$product->id);
@ -503,7 +504,7 @@ if ($id || $ref)
// Charges ???? // Charges ????
if ($conf->global->PRODUCT_CHARGES) if ($conf->global->PRODUCT_CHARGES)
{ {
if (! empty($conf->margin->enabled)) if (! empty($conf->margin->enabled))
{ {
print '<td align="right">'; print '<td align="right">';
@ -511,7 +512,7 @@ if ($id || $ref)
print '</td>'; print '</td>';
} }
} }
// Unit price // Unit price
print '<td align="right">'; print '<td align="right">';
print price($productfourn->fourn_unitprice); print price($productfourn->fourn_unitprice);
@ -533,7 +534,7 @@ if ($id || $ref)
print '</td>'; print '</td>';
} }
} }
if (is_object($hookmanager)) if (is_object($hookmanager))
{ {
$parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$product->id); $parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$product->id);

View File

@ -145,12 +145,12 @@ print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'
// Date start // Date start
print '<tr><td>'.$langs->trans("DateStart").'</td><td>'; print '<tr><td>'.$langs->trans("DateStart").'</td><td>';
print dol_print_date($object->date_start,'day'); print dol_print_date($project->date_start,'day');
print '</td></tr>'; print '</td></tr>';
// Date end // Date end
print '<tr><td>'.$langs->trans("DateEnd").'</td><td>'; print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
print dol_print_date($object->date_end,'day'); print dol_print_date($project->date_end,'day');
print '</td></tr>'; print '</td></tr>';
print '</table>'; print '</table>';

View File

@ -62,58 +62,57 @@ $parameters=array('resource_id'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook))
/*******************************************************************
* ACTIONS
*
* Put here all code to do according to value of "action" parameter
********************************************************************/
if ($action == 'update' && ! $_POST["cancel"] && $user->rights->resource->write )
{ {
$error=0; /*******************************************************************
* ACTIONS
********************************************************************/
if (empty($ref)) if ($action == 'update' && ! $_POST["cancel"] && $user->rights->resource->write )
{ {
$error++; $error=0;
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")).'</div>';
}
if (! $error) if (empty($ref))
{
$res = $object->fetch($id);
if ( $res > 0 )
{ {
$object->ref = $ref; $error++;
$object->description = $description; setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")), 'errors');
$object->fk_code_type_resource = $fk_code_type_resource; }
$result=$object->update($user); if (! $error)
if ($result > 0) {
$res = $object->fetch($id);
if ( $res > 0 )
{ {
Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); $object->ref = $ref;
exit; $object->description = $description;
$object->fk_code_type_resource = $fk_code_type_resource;
$result=$object->update($user);
if ($result > 0)
{
Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
exit;
}
else
{
setEventMessage($object->error, 'errors');
$action='edit';
}
} }
else else
{ {
setEventMessage('<div class="error">'.$object->error.'</div>'); setEventMessage($object->error,'errors');
$action='edit'; $action='edit';
} }
} }
else else
{ {
setEventMessage($object->error,'errors');
$action='edit'; $action='edit';
} }
} }
else
{
$action='edit';
}
} }
/*************************************************** /***************************************************
* VIEW * VIEW
* *