forked from Wavyzz/dolibarr
Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop Conflicts: htdocs/comm/action/class/actioncomm.class.php htdocs/compta/facture/class/facture.class.php htdocs/core/class/html.form.class.php
This commit is contained in:
12
.tx/config
12
.tx/config
@@ -236,6 +236,18 @@ source_file = htdocs/langs/en_US/paypal.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.printgcp]
|
||||
file_filter = htdocs/langs/<lang>/printgcp.lang
|
||||
source_file = htdocs/langs/en_US/printgcp.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.printing]
|
||||
file_filter = htdocs/langs/<lang>/printing.lang
|
||||
source_file = htdocs/langs/en_US/printing.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.printipp]
|
||||
file_filter = htdocs/langs/<lang>/printipp.lang
|
||||
source_file = htdocs/langs/en_US/printipp.lang
|
||||
|
||||
@@ -52,6 +52,9 @@ http://www.fsf.org/licensing/licenses/index_html
|
||||
Copyright
|
||||
---------
|
||||
|
||||
Copyright (C) 2015
|
||||
- Marcos García <marcosgdf@gmail.com>
|
||||
|
||||
Copyright (C) 2014
|
||||
- Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
- Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
|
||||
14
ChangeLog
14
ChangeLog
@@ -196,6 +196,18 @@ Dolibarr better:
|
||||
- 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: 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 *****
|
||||
- Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice.
|
||||
@@ -360,6 +372,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 #1752 ] Date filter of margins module, filters since 12H instead of 00H
|
||||
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 *****
|
||||
Fix: Avoid missing class error for fetch_thirdparty method #1973
|
||||
|
||||
@@ -11,7 +11,6 @@ beta version of Dolibarr, step by step.
|
||||
- Update version/info in /ChangeLog
|
||||
- Update version number with x.y.z-w in htdocs/filefunc.inc.php
|
||||
- Update version number with x.y.z-w in build/debian/changelog
|
||||
- Update version number with x.y.z-w in build/exe/doliwamp/doliwamp.iss
|
||||
- Update version number with x.y.z-w in build/rpm/*.spec
|
||||
- Commit all changes.
|
||||
- Add a Tag (x.y.betaz_YYYYMMDD) and push it: git push --tags
|
||||
@@ -30,10 +29,9 @@ This files describe steps made by Dolibarr packaging team to make a
|
||||
complete release of Dolibarr, step by step.
|
||||
|
||||
- Check all files are commited.
|
||||
- Update version/info in ChangeLog
|
||||
- Update version/info in ChangeLog. To generate a changelog, you can do "git log x.y.z..HEAD --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e '^Fix\|New\|Sec'"
|
||||
- Update version number with x.y.z in htdocs/filefunc.inc.php
|
||||
- Update version number with x.y.z in build/debian/changelog
|
||||
- Update version number with x.y.z in build/exe/doliwamp/doliwamp.iss
|
||||
- Update version number with x.y.z in build/rpm/*.spec
|
||||
- Commit all changes.
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -65,12 +65,12 @@ if ($action == 'update' && empty($_POST["cancel"]))
|
||||
{
|
||||
dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS", GETPOST("MAIN_DISABLE_ALL_MAILS"),'chaine',0,'',$conf->entity);
|
||||
// Send mode parameters
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SENDMODE", GETPOST("MAIN_MAIL_SENDMODE"),'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_SMTP_PORT"])) dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOST("MAIN_MAIL_SMTP_PORT"),'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_SMTP_SERVER"])) dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER"),'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_SMTPS_ID"])) dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID"), 'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_SMTPS_PW"])) dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW"), 'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_EMAIL_TLS"])) dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOST("MAIN_MAIL_EMAIL_TLS"),'chaine',0,'',0);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SENDMODE", GETPOST("MAIN_MAIL_SENDMODE"),'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOST("MAIN_MAIL_SMTP_PORT"),'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER"),'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID"), 'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW"), 'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOST("MAIN_MAIL_EMAIL_TLS"),'chaine',0,'',$conf->entity);
|
||||
// Content parameters
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_FROM", GETPOST("MAIN_MAIL_EMAIL_FROM"), 'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_ERRORS_TO", GETPOST("MAIN_MAIL_ERRORS_TO"), 'chaine',0,'',$conf->entity);
|
||||
|
||||
@@ -118,6 +118,13 @@ class ActionComm extends CommonObject
|
||||
$error=0;
|
||||
$now=dol_now();
|
||||
|
||||
// Check parameters
|
||||
if (empty($this->userownerid))
|
||||
{
|
||||
$this->errors[]='ErrorPropertyUserowneridNotDefined';
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Clean parameters
|
||||
$this->label=dol_trunc(trim($this->label),128);
|
||||
$this->location=dol_trunc(trim($this->location),128);
|
||||
@@ -147,8 +154,9 @@ class ActionComm extends CommonObject
|
||||
$userownerid=$this->userownerid;
|
||||
$userdoneid=$this->userdoneid;
|
||||
|
||||
// Be sure assigned user array is not empty.
|
||||
if (count($this->userassigned) == 0) $this->userassigned[] = array('id'=>$userownerid);
|
||||
// Be sure assigned user is defined as an array of array('id'=>,'mandatory'=>,...).
|
||||
if (empty($this->userassigned) || count($this->userassigned) == 0 || ! is_array($this->userassigned))
|
||||
$this->userassigned = array($userownerid=>array('id'=>$userownerid));
|
||||
|
||||
if (! $this->type_id || ! $this->type_code)
|
||||
{
|
||||
@@ -235,6 +243,12 @@ class ActionComm extends CommonObject
|
||||
{
|
||||
foreach($this->userassigned as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) // For backward compatibility when valid
|
||||
{
|
||||
$tmpid=$val;
|
||||
$val=array('id'=>$val);
|
||||
}
|
||||
|
||||
$sql ="INSERT INTO ".MAIN_DB_PREFIX."actioncomm_resources(fk_actioncomm, element_type, fk_element, mandatory, transparency, answer_status)";
|
||||
$sql.=" VALUES(".$this->id.", 'user', ".$val['id'].", ".($val['mandatory']?$val['mandatory']:'0').", ".($val['transparency']?$val['transparency']:'0').", ".($val['answer_status']?$val['answer_status']:'0').")";
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ $pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (! $sortorder) $sortorder="ASC";
|
||||
if (! $sortfield) $sortfield="nom";
|
||||
$cancelbutton = GETPOST('cancel');
|
||||
|
||||
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||
$hookmanager->initHooks(array('commcard','globalcard'));
|
||||
@@ -80,12 +81,14 @@ $parameters = array('socid' => $id);
|
||||
$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');
|
||||
|
||||
//Some actions show a "cancel" input submit button with name="cancel"
|
||||
$cancelbutton = GETPOST('cancel');
|
||||
|
||||
if ($action == 'setcustomeraccountancycode')
|
||||
if (empty($reshook))
|
||||
{
|
||||
if (! $cancelbutton)
|
||||
if ($cancelbutton)
|
||||
{
|
||||
$action="";
|
||||
}
|
||||
|
||||
if ($action == 'setcustomeraccountancycode')
|
||||
{
|
||||
$result=$object->fetch($id);
|
||||
$object->code_compta=$_POST["customeraccountancycode"];
|
||||
@@ -95,56 +98,52 @@ if ($action == 'setcustomeraccountancycode')
|
||||
setEventMessage($object->errors, 'errors');
|
||||
}
|
||||
}
|
||||
$action="";
|
||||
}
|
||||
|
||||
// conditions de reglement
|
||||
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);
|
||||
}
|
||||
// conditions de reglement
|
||||
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);
|
||||
}
|
||||
// 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'];
|
||||
$result=$object->update($object->id);
|
||||
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'];
|
||||
$result=$object->update($object->id);
|
||||
if ($result < 0) dol_print_error($db,$object->error);
|
||||
}
|
||||
|
||||
// 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');
|
||||
}
|
||||
// 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 prospect 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 prospect 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 outstandng limit
|
||||
if ($action == 'setOutstandingBill')
|
||||
{
|
||||
if (!$cancelbutton)
|
||||
// update outstandng limit
|
||||
if ($action == 'setOutstandingBill')
|
||||
{
|
||||
$object->fetch($id);
|
||||
$object->outstanding_limit=GETPOST('OutstandingBill');
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2550,21 +2550,18 @@ class Propal extends CommonObject
|
||||
{
|
||||
$mybool=false;
|
||||
|
||||
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
||||
foreach ($dirmodels as $reldir)
|
||||
{
|
||||
$file = $conf->global->PROPALE_ADDON.".php";
|
||||
$classname = $conf->global->PROPALE_ADDON;
|
||||
$file = $conf->global->PROPALE_ADDON.".php";
|
||||
$classname = $conf->global->PROPALE_ADDON;
|
||||
|
||||
// Include file with class
|
||||
foreach ($conf->file->dol_document_root as $dirroot)
|
||||
{
|
||||
$dir = $dirroot.$reldir."/core/modules/propale/";
|
||||
// Load file with numbering class (if found)
|
||||
$mybool|=@include_once $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/propale/");
|
||||
|
||||
// Load file with numbering class (if found)
|
||||
$mybool|=@include_once $dir.$file;
|
||||
}
|
||||
|
||||
if (! $mybool)
|
||||
{
|
||||
@@ -2581,14 +2578,14 @@ class Propal extends CommonObject
|
||||
return $numref;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$this->error=$obj->error;
|
||||
//dol_print_error($db,"Propale::getNextNumRef ".$obj->error);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$langs->load("errors");
|
||||
print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
|
||||
return "";
|
||||
|
||||
@@ -177,11 +177,13 @@ $parameters=array();
|
||||
$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 ($action == 'cstc')
|
||||
{
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm = ".$_GET["pstcomm"];
|
||||
$sql .= " WHERE rowid = ".$_GET["socid"];
|
||||
$result=$db->query($sql);
|
||||
if (empty($reshook)) {
|
||||
if ($action == 'cstc')
|
||||
{
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."societe SET fk_stcomm = ".$_GET["pstcomm"];
|
||||
$sql .= " WHERE rowid = ".$_GET["socid"];
|
||||
$result=$db->query($sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -140,26 +140,25 @@ class Commande extends CommonOrder
|
||||
|
||||
if (! empty($conf->global->COMMANDE_ADDON))
|
||||
{
|
||||
$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;
|
||||
$mybool=false;
|
||||
|
||||
// Include file with class
|
||||
foreach ($conf->file->dol_document_root as $dirroot)
|
||||
{
|
||||
$dir = $dirroot.$reldir."/core/modules/commande/";
|
||||
// Load file with numbering class (if found)
|
||||
$mybool|=@include_once $dir.$file;
|
||||
}
|
||||
}
|
||||
$file = $conf->global->COMMANDE_ADDON.".php";
|
||||
$classname = $conf->global->COMMANDE_ADDON;
|
||||
|
||||
// Include file with class
|
||||
$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
|
||||
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)
|
||||
{
|
||||
dol_print_error('',"Failed to include file ".$file);
|
||||
return '';
|
||||
dol_print_error('',"Failed to include file ".$file);
|
||||
return '';
|
||||
}
|
||||
|
||||
$obj = new $classname();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -202,17 +202,6 @@ class Facture extends CommonInvoice
|
||||
if (! $this->cond_reglement_id) $this->cond_reglement_id = 0;
|
||||
if (! $this->mode_reglement_id) $this->mode_reglement_id = 0;
|
||||
$this->brouillon = 1;
|
||||
if (empty($this->situation_cycle_ref)) {
|
||||
$this->situation_cycle_ref = 'null';
|
||||
}
|
||||
|
||||
if (empty($this->situation_counter)) {
|
||||
$this->situation_counter = 'null';
|
||||
}
|
||||
|
||||
if (empty($this->situation_final)) {
|
||||
$this->situation_final = '0';
|
||||
}
|
||||
|
||||
dol_syslog(get_class($this)."::create user=".$user->id);
|
||||
|
||||
@@ -301,12 +290,12 @@ class Facture extends CommonInvoice
|
||||
$sql.= ",".($this->fk_facture_source?"'".$this->db->escape($this->fk_facture_source)."'":"null");
|
||||
$sql.= ",".($user->id > 0 ? "'".$user->id."'":"null");
|
||||
$sql.= ",".($this->fk_project?$this->fk_project:"null");
|
||||
$sql.= ','.$this->cond_reglement_id;
|
||||
$sql.= ",".$this->mode_reglement_id;
|
||||
$sql.= ", ".$this->cond_reglement_id;
|
||||
$sql.= ", ".$this->mode_reglement_id;
|
||||
$sql.= ", '".$this->db->idate($datelim)."', '".$this->modelpdf."'";
|
||||
$sql.= ", ".$this->situation_cycle_ref;
|
||||
$sql.= ", ".$this->situation_counter;
|
||||
$sql.= ", ".$this->situation_final;
|
||||
$sql.= ", ".($this->situation_cycle_ref?"'".$this->db->escape($this->situation_cycle_ref)."'":"null");
|
||||
$sql.= ", ".($this->situation_counter?"'".$this->db->escape($this->situation_counter)."'":"null");
|
||||
$sql.= ", ".($this->situation_final?$this->situation_final:0);
|
||||
$sql.=")";
|
||||
|
||||
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||
@@ -2027,7 +2016,7 @@ class Facture extends CommonInvoice
|
||||
* @param int $fk_prev_id Previous situation line id reference
|
||||
* @return int <0 if KO, Id of line if OK
|
||||
*/
|
||||
function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0, $type=self::TYPE_STANDARD, $rang=-1, $special_code=0, $origin='', $origin_id=0, $fk_parent_line=0, $fk_fournprice=null, $pa_ht=0, $label='', $array_option=0, $situation_percent=0, $fk_prev_id='')
|
||||
function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0, $type=self::TYPE_STANDARD, $rang=-1, $special_code=0, $origin='', $origin_id=0, $fk_parent_line=0, $fk_fournprice=null, $pa_ht=0, $label='', $array_option=0, $situation_percent=100, $fk_prev_id='')
|
||||
{
|
||||
global $mysoc, $conf, $langs;
|
||||
|
||||
@@ -2335,11 +2324,10 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
|
||||
/**
|
||||
* Update_percent
|
||||
*
|
||||
* Update invoice line with percentage
|
||||
*
|
||||
* @param FactureLigne $line Invoice line
|
||||
* @param int $percent percent
|
||||
*
|
||||
* @param int $percent Percentage
|
||||
* @return void
|
||||
*/
|
||||
function update_percent($line, $percent)
|
||||
@@ -2610,14 +2598,19 @@ class Facture extends CommonInvoice
|
||||
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';
|
||||
|
||||
if (! empty($conf->global->FACTURE_ADDON))
|
||||
{
|
||||
$mybool=false;
|
||||
|
||||
$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/";
|
||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||
|
||||
foreach ($dirmodels as $reldir) {
|
||||
|
||||
$dir = dol_buildpath($reldir."core/modules/facture/");
|
||||
|
||||
// Load file with numbering class (if found)
|
||||
$mybool|=@include_once $dir.$file;
|
||||
}
|
||||
@@ -2636,7 +2629,6 @@ class Facture extends CommonInvoice
|
||||
$mybool|=@include_once $dir.$file;
|
||||
}
|
||||
}
|
||||
//print "xx".$mybool.$dir.$file."-".$classname;
|
||||
|
||||
if (! $mybool)
|
||||
{
|
||||
@@ -2646,7 +2638,7 @@ class Facture extends CommonInvoice
|
||||
|
||||
$obj = new $classname();
|
||||
$numref = "";
|
||||
$numref = $obj->getNumRef($soc,$this,$mode);
|
||||
$numref = $obj->getNextValue($soc,$this,$mode);
|
||||
|
||||
if ($numref != "")
|
||||
{
|
||||
@@ -2654,8 +2646,15 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
else
|
||||
{
|
||||
//dol_print_error($db,get_class($this)."::getNextNumRef ".$obj->error);
|
||||
return false;
|
||||
dol_print_error($db,"Facture::getNextNumRef ".$obj->error);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("errors");
|
||||
print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3455,7 +3454,7 @@ class Facture extends CommonInvoice
|
||||
/**
|
||||
* Checks if the invoice is the first of a cycle
|
||||
*
|
||||
* @return boolean ($this->situation_counter == 1)
|
||||
* @return boolean
|
||||
*/
|
||||
function is_first()
|
||||
{
|
||||
@@ -3465,7 +3464,7 @@ class Facture extends CommonInvoice
|
||||
/**
|
||||
* Returns an array containing the previous situations as Facture objects
|
||||
*
|
||||
* @return array array of prev_sits
|
||||
* @return mixed -1 if error, array of previous situations
|
||||
*/
|
||||
function get_prev_sits()
|
||||
{
|
||||
|
||||
@@ -553,7 +553,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("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("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);
|
||||
if (empty($mode))
|
||||
{
|
||||
|
||||
@@ -71,185 +71,188 @@ if ($facid > 0)
|
||||
// Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array
|
||||
$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
|
||||
*/
|
||||
|
||||
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'));
|
||||
$paiement_id = 0;
|
||||
$totalpayment = 0;
|
||||
$atleastonepaymentnotnull = 0;
|
||||
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
|
||||
$paiement_id = 0;
|
||||
$totalpayment = 0;
|
||||
$atleastonepaymentnotnull = 0;
|
||||
|
||||
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date
|
||||
$tmpinvoice=new Facture($db);
|
||||
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
|
||||
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date
|
||||
$tmpinvoice=new Facture($db);
|
||||
foreach ($_POST as $key => $value)
|
||||
{
|
||||
$newvalue = price2num($value,'MT');
|
||||
$amounts[$key] = -$newvalue;
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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++;
|
||||
}
|
||||
}
|
||||
// Check parameters
|
||||
if (! GETPOST('paiementcode'))
|
||||
{
|
||||
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), '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 (! 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 (! $error)
|
||||
{
|
||||
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices')=='on'?1:0));
|
||||
if ($paiement_id < 0)
|
||||
{
|
||||
setEventMessage($paiement->error, 'errors');
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
if (empty($totalpayment) && empty($atleastonepaymentnotnull))
|
||||
{
|
||||
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), '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 (empty($datepaye))
|
||||
{
|
||||
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
/*
|
||||
* Action add_paiement
|
||||
*/
|
||||
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;
|
||||
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();
|
||||
}
|
||||
/*
|
||||
* 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');
|
||||
$amounts[$key] = -$newvalue;
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -736,7 +736,7 @@ class BonPrelevement extends CommonObject
|
||||
function Create($banque=0, $agence=0, $mode='real')
|
||||
{
|
||||
global $conf,$langs;
|
||||
|
||||
|
||||
dol_syslog(__METHOD__."::Bank=".$banque." Office=".$agence, LOG_DEBUG);
|
||||
|
||||
require_once (DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
|
||||
@@ -782,7 +782,7 @@ class BonPrelevement extends CommonObject
|
||||
//if ($agence) $sql.= " AND sr.code_guichet = '".$conf->global->PRELEVEMENT_CODE_GUICHET."'";
|
||||
|
||||
dol_syslog(__METHOD__."::Read invoices, sql=".$sql, LOG_DEBUG);
|
||||
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
@@ -894,24 +894,23 @@ class BonPrelevement extends CommonObject
|
||||
if (!$error)
|
||||
{
|
||||
$ref = substr($year,-2).$month;
|
||||
|
||||
|
||||
$sql = "SELECT substring(ref from char_length(ref) - 1)";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_bons";
|
||||
$sql.= " WHERE ref LIKE '%".$ref."%'";
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
$sql.= " ORDER BY ref DESC LIMIT 1";
|
||||
|
||||
|
||||
dol_syslog(get_class($this)."::Create sql=".$sql, LOG_DEBUG);
|
||||
dol_syslog(__METHOD__."::Treatments", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
|
||||
if ($resql)
|
||||
{
|
||||
$row = $this->db->fetch_row($resql);
|
||||
$ref = "T".$ref.str_pad(dol_substr("00".intval($row[0])+1),2,"0",STR_PAD_LEFT);
|
||||
|
||||
|
||||
$filebonprev = $ref;
|
||||
|
||||
|
||||
// Create withdraw receipt in database
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons (";
|
||||
$sql.= " ref, entity, datec";
|
||||
@@ -920,18 +919,16 @@ class BonPrelevement extends CommonObject
|
||||
$sql.= ", ".$conf->entity;
|
||||
$sql.= ", '".$this->db->idate($now)."'";
|
||||
$sql.= ")";
|
||||
|
||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
|
||||
if ($resql)
|
||||
{
|
||||
$prev_id = $this->db->last_insert_id(MAIN_DB_PREFIX."prelevement_bons");
|
||||
|
||||
|
||||
$dir=$conf->prelevement->dir_output.'/receipts';
|
||||
$file=$filebonprev;
|
||||
if (! is_dir($dir)) dol_mkdir($dir);
|
||||
|
||||
|
||||
$bonprev = new BonPrelevement($this->db, $dir."/".$file);
|
||||
$bonprev->id = $prev_id;
|
||||
}
|
||||
@@ -946,8 +943,6 @@ class BonPrelevement extends CommonObject
|
||||
$error++;
|
||||
dol_syslog(__METHOD__."::Get last withdraw receipt ".$this->db->error(), LOG_ERR);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1011,7 +1006,7 @@ class BonPrelevement extends CommonObject
|
||||
*/
|
||||
|
||||
dol_syslog(__METHOD__."::Init withdraw receipt for ".count($factures_prev)." invoices", LOG_DEBUG);
|
||||
|
||||
|
||||
if (count($factures_prev) > 0)
|
||||
{
|
||||
$bonprev->date_echeance = $datetimeprev;
|
||||
@@ -1045,13 +1040,10 @@ class BonPrelevement extends CommonObject
|
||||
$sql.= " WHERE rowid = ".$prev_id;
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
|
||||
dol_syslog(__METHOD__."::Update total, sql=".$sql, LOG_DEBUG);
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if (! $resql)
|
||||
{
|
||||
$error++;
|
||||
dol_syslog("Erreur mise a jour du total - $sql");
|
||||
dol_syslog(__METHOD__."::Error update total: ".$this->db->error(), LOG_ERR);
|
||||
}
|
||||
|
||||
|
||||
@@ -211,23 +211,31 @@ class Contrat extends CommonObject
|
||||
global $db, $langs, $conf;
|
||||
$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
|
||||
$classname = $conf->global->CONTRACT_ADDON;
|
||||
// Include file with class
|
||||
$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();
|
||||
|
||||
$numref = "";
|
||||
$numref = $obj->getNextValue($soc,$this);
|
||||
|
||||
@@ -237,15 +245,17 @@ class Contrat extends CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error = $obj->error;
|
||||
dol_print_error($db,get_class($this)."::getNextValue ".$obj->error);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_CONTRACT_ADDON_NotDefined");
|
||||
$langs->load("errors");
|
||||
print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
64
htdocs/core/actions_printing.inc.php
Normal file
64
htdocs/core/actions_printing.inc.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/* Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/actions_printing.inc.php
|
||||
* \brief Code for actions print_file to print file with calling trigger
|
||||
*/
|
||||
|
||||
|
||||
// $action must be defined
|
||||
// $db, $user, $conf, $langs must be defined
|
||||
// Filename to print must be provided into 'file' parameter
|
||||
|
||||
// Print file
|
||||
if ($action == 'print_file' and $user->rights->printing->read)
|
||||
{
|
||||
$langs->load("printing");
|
||||
require_once DOL_DOCUMENT_ROOT . '/core/modules/printing/modules_printing.php';
|
||||
$objectprint = new PrintingDriver($db);
|
||||
$list = $objectprint->listDrivers($db, 10);
|
||||
if (! empty($list)) {
|
||||
$errorprint=0;
|
||||
$printed=0;
|
||||
foreach ($list as $driver) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
|
||||
$langs->load($driver);
|
||||
$classname = 'printing_'.$driver;
|
||||
$printer = new $classname($db);
|
||||
//print '<pre>'.print_r($printer, true).'</pre>';
|
||||
|
||||
if (! empty($conf->global->{$printer->active})) {
|
||||
$subdir=(GETPOST('printer', 'alpha')=='expedition'?'sending':'');
|
||||
$errorprint = $printer->print_file(GETPOST('file', 'alpha'), GETPOST('printer', 'alpha'), $subdir);
|
||||
//if ($errorprint < 0) {
|
||||
// setEventMessage($interface->errors, 'errors');
|
||||
//}
|
||||
if ($errorprint=='') {
|
||||
setEventMessage($langs->trans("FileWasSentToPrinter", basename(GETPOST('file'))).' '.$langs->trans("ViaModule").' '.$printer->name);
|
||||
$printed++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($printed==0) setEventMessage($langs->trans("NoActivePrintingModuleFound"));
|
||||
} else {
|
||||
setEventMessage($langs->trans("NoModuleFound"), 'warning');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
/* Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/actions_printipp.inc.php
|
||||
* \brief Code for actions print_file to print file using ipp
|
||||
*/
|
||||
|
||||
|
||||
// $action must be defined
|
||||
// $db, $user, $conf, $langs must be defined
|
||||
// Filename to print must be provided into 'file' parameter
|
||||
|
||||
// Print file
|
||||
if ($action == 'print_file' and $user->rights->printipp->read)
|
||||
{
|
||||
$langs->load("printipp");
|
||||
require_once DOL_DOCUMENT_ROOT . '/core/class/dolprintipp.class.php';
|
||||
$printer = new dolPrintIPP($db, $conf->global->PRINTIPP_HOST, $conf->global->PRINTIPP_PORT, $user->login, $conf->global->PRINTIPP_USER, $conf->global->PRINTIPP_PASSWORD);
|
||||
$result = $printer->print_file(GETPOST('file', 'alpha'), GETPOST('printer', 'alpha'));
|
||||
if ($result)
|
||||
{
|
||||
setEventMessage($result,'warnings');
|
||||
}
|
||||
else
|
||||
{
|
||||
setEventMessage($langs->trans("FileWasSentToPrinter", basename(GETPOST('file'))));
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
@@ -103,7 +103,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
||||
}
|
||||
else // Id du contact
|
||||
{
|
||||
$sendto = $thirdparty->contact_get_property($_POST['receiver'],'email');
|
||||
$sendto = $thirdparty->contact_get_property((int) $_POST['receiver'],'email');
|
||||
$sendtoid = $_POST['receiver'];
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
||||
}
|
||||
else // Id du contact
|
||||
{
|
||||
$sendtocc = $thirdparty->contact_get_property($_POST['receivercc'],'email');
|
||||
$sendtocc = $thirdparty->contact_get_property((int) $_POST['receivercc'],'email');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -404,7 +404,7 @@ abstract class CommonDocGenerator
|
||||
{
|
||||
global $conf;
|
||||
|
||||
return array(
|
||||
$resarray= array(
|
||||
'line_fulldesc'=>doc_getlinedesc($line,$outputlangs),
|
||||
'line_product_ref'=>$line->product_ref,
|
||||
'line_product_label'=>$line->product_label,
|
||||
@@ -425,6 +425,18 @@ abstract class CommonDocGenerator
|
||||
'line_date_end'=>$line->date_end,
|
||||
'line_date_end_rfc'=>dol_print_date($line->date_end,'rfc')
|
||||
);
|
||||
|
||||
// Retrieve extrafields
|
||||
$extrafieldkey=$line->element;
|
||||
$array_key="line";
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||
$extrafields = new ExtraFields($this->db);
|
||||
$extralabels = $extrafields->fetch_name_optionals_label($extrafieldkey,true);
|
||||
$line->fetch_optionals($line->rowid,$extralabels);
|
||||
|
||||
$resarray = $this->fill_substitutionarray_with_extrafields($line,$resarray,$extrafields,$array_key=$array_key,$outputlangs);
|
||||
|
||||
return $resarray;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,7 +28,7 @@ class dolprintIPP
|
||||
{
|
||||
var $host;
|
||||
var $port;
|
||||
var $userid; /* user login */
|
||||
var $userid; /* user login */
|
||||
var $user;
|
||||
var $password;
|
||||
var $error;
|
||||
|
||||
@@ -2666,7 +2666,7 @@ class Form
|
||||
*
|
||||
* @return string HTML select
|
||||
*/
|
||||
function load_situation_invoices($selected = '', $socid=null)
|
||||
function load_situation_invoices($selected = '', $socid = '')
|
||||
{
|
||||
global $langs;
|
||||
|
||||
|
||||
@@ -273,9 +273,9 @@ class FormFile
|
||||
}
|
||||
|
||||
$printer=0;
|
||||
if (in_array($modulepart,array('facture','propal','proposal','order','commande'))) // This feature is implemented only for such elements
|
||||
if (in_array($modulepart,array('facture','propal','proposal','order','commande','expedition'))) // This feature is implemented only for such elements
|
||||
{
|
||||
$printer = (!empty($user->rights->printipp->read) && !empty($conf->printipp->enabled))?true:false;
|
||||
$printer = (!empty($user->rights->printing->read) && !empty($conf->printing->enabled))?true:false;
|
||||
}
|
||||
|
||||
$hookmanager->initHooks(array('formfile'));
|
||||
@@ -604,8 +604,8 @@ class FormFile
|
||||
$out.= '<td align="right">';
|
||||
if ($delallowed)
|
||||
{
|
||||
$out.= '<a href="'.$urlsource.(strpos($urlsource,'?')?'&':'?').'action=remove_file&file='.urlencode($relativepath);
|
||||
$out.= ($param?'&'.$param:'');
|
||||
$out.= '<a href="'.$urlsource.(strpos($urlsource,'?')?'&':'?').'action=remove_file&file='.urlencode($relativepath);
|
||||
$out.= ($param?'&'.$param:'');
|
||||
//$out.= '&modulepart='.$modulepart; // TODO obsolete ?
|
||||
//$out.= '&urlsource='.urlencode($urlsource); // TODO obsolete ?
|
||||
$out.= '">'.img_picto($langs->trans("Delete"), 'delete.png').'</a>';
|
||||
@@ -614,9 +614,9 @@ class FormFile
|
||||
if ($printer)
|
||||
{
|
||||
//$out.= '<td align="right">';
|
||||
$out.= ' <a href="'.$urlsource.(strpos($urlsource,'?')?'&':'?').'action=print_file&printer='.$modulepart.'&file='.urlencode($relativepath);
|
||||
$out.= ($param?'&'.$param:'');
|
||||
$out.= '">'.img_picto($langs->trans("Print"),'printer.png').'</a>';
|
||||
$out.= ' <a href="'.$urlsource.(strpos($urlsource,'?')?'&':'?').'action=print_file&printer='.$modulepart.'&file='.urlencode($relativepath);
|
||||
$out.= ($param?'&'.$param:'');
|
||||
$out.= '">'.img_picto($langs->trans("PrintFile", $relativepath),'printer.png').'</a>';
|
||||
}
|
||||
if ($morepicto)
|
||||
{
|
||||
|
||||
@@ -152,7 +152,7 @@ class Menubase
|
||||
$sql.= " '".$this->fk_menu."',";
|
||||
$sql.= " ".($this->fk_mainmenu?"'".$this->fk_mainmenu."'":"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->target)."',";
|
||||
$sql.= " '".$this->db->escape($this->titre)."',";
|
||||
|
||||
@@ -2456,19 +2456,22 @@ function dol_print_error($db='',$error='')
|
||||
if ($_SERVER['DOCUMENT_ROOT']) // Mode web
|
||||
{
|
||||
$out.=$langs->trans("DolibarrHasDetectedError").".<br>\n";
|
||||
if (! empty($conf->global->MAIN_FEATURES_LEVEL))
|
||||
$out.="You use an experimental level of features, so please do NOT report any bugs, anywhere, until going back to MAIN_FEATURES_LEVEL = 0.<br>\n";
|
||||
if (! empty($conf->global->MAIN_FEATURES_LEVEL)) $out.="You use an experimental level of features, so please do NOT report any bugs, anywhere, until going back to MAIN_FEATURES_LEVEL = 0.<br>\n";
|
||||
$out.=$langs->trans("InformationToHelpDiagnose").":<br>\n";
|
||||
|
||||
$out.="<b>".$langs->trans("Date").":</b> ".dol_print_date(time(),'dayhourlog')."<br>\n";;
|
||||
$out.="<b>".$langs->trans("Dolibarr").":</b> ".DOL_VERSION."<br>\n";;
|
||||
if (isset($conf->global->MAIN_FEATURES_LEVEL)) $out.="<b>".$langs->trans("LevelOfFeature").":</b> ".$conf->global->MAIN_FEATURES_LEVEL."<br>\n";;
|
||||
$out.="<b>".$langs->trans("Date").":</b> ".dol_print_date(time(),'dayhourlog')."<br>\n";
|
||||
$out.="<b>".$langs->trans("Dolibarr").":</b> ".DOL_VERSION."<br>\n";
|
||||
if (isset($conf->global->MAIN_FEATURES_LEVEL)) $out.="<b>".$langs->trans("LevelOfFeature").":</b> ".$conf->global->MAIN_FEATURES_LEVEL."<br>\n";
|
||||
if (function_exists("phpversion"))
|
||||
{
|
||||
$out.="<b>".$langs->trans("PHP").":</b> ".phpversion()."<br>\n";
|
||||
//phpinfo(); // This is to show location of php.ini file
|
||||
}
|
||||
$out.="<b>".$langs->trans("Server").":</b> ".$_SERVER["SERVER_SOFTWARE"]."<br>\n";
|
||||
if (function_exists("php_uname"))
|
||||
{
|
||||
$out.="<b>".$langs->trans("OS").":</b> ".php_uname()."<br>\n";
|
||||
}
|
||||
$out.="<b>".$langs->trans("UserAgent").":</b> ".$_SERVER["HTTP_USER_AGENT"]."<br>\n";
|
||||
$out.="<br>\n";
|
||||
$out.="<b>".$langs->trans("RequestedUrl").":</b> ".dol_htmlentities($_SERVER["REQUEST_URI"],ENT_COMPAT,'UTF-8')."<br>\n";
|
||||
$out.="<b>".$langs->trans("Referer").":</b> ".(isset($_SERVER["HTTP_REFERER"])?dol_htmlentities($_SERVER["HTTP_REFERER"],ENT_COMPAT,'UTF-8'):'')."<br>\n";
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
* @param int $type 0/1=Product/service
|
||||
* @param Societe $seller Thirdparty seller (we need $seller->country_id property). Provided only if seller is the supplier, otherwise $seller will be $mysoc.
|
||||
* @param array $localtaxes_array Array with localtaxes info (loaded by getLocalTaxesFromRate function).
|
||||
* @param float $progress Situation invoices progress
|
||||
* @param float $progress Situation invoices progress (value from 0 to 100, 100 by default)
|
||||
* @return result[ 0=total_ht,
|
||||
* 1=total_vat,
|
||||
* 2=total_ttc,
|
||||
@@ -97,6 +97,8 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocalt
|
||||
if ($uselocaltax1_rate < 0) $uselocaltax1_rate=$seller->localtax1_assuj;
|
||||
if ($uselocaltax2_rate < 0) $uselocaltax2_rate=$seller->localtax2_assuj;
|
||||
|
||||
dol_syslog('Price.lib::calcul_price_total qty='.$qty.' pu='.$pu.' remise_percent_ligne='.$remise_percent_ligne.' txtva='.$txtva.' uselocaltax1_rate='.$uselocaltax1_rate.' uselocaltax2_rate='.$uselocaltax2_rate.' remise_percent_global='.$remise_percent_global.' price_base_type='.$ice_base_type.' type='.$type.' progress='.$progress);
|
||||
|
||||
// Now we search localtaxes information ourself (rates and types).
|
||||
$localtax1_type=0;
|
||||
$localtax2_type=0;
|
||||
|
||||
@@ -344,7 +344,8 @@ abstract class DolibarrModules
|
||||
|
||||
|
||||
/**
|
||||
* Gives the translated module name if translation exists in admin.lang or the default module name.
|
||||
* Gives the translated module name if translation exists in admin.lang or into language files of module.
|
||||
* Otherwise return the module key name.
|
||||
*
|
||||
* @return string Translated module name
|
||||
*/
|
||||
@@ -359,9 +360,16 @@ abstract class DolibarrModules
|
||||
return $langs->trans("Module".$this->numero."Name");
|
||||
}
|
||||
else
|
||||
{
|
||||
// If module name translation using it's unique id does not exists, we take its name
|
||||
return $this->name;
|
||||
{
|
||||
// If module name translation using it's unique id does not exists, we take use its name to find translation
|
||||
if (is_array($this->langfiles))
|
||||
{
|
||||
foreach($this->langfiles as $val)
|
||||
{
|
||||
if ($val) $langs->load($val);
|
||||
}
|
||||
}
|
||||
return $langs->trans($this->name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,9 +390,16 @@ abstract class DolibarrModules
|
||||
return $langs->trans("Module".$this->numero."Desc");
|
||||
}
|
||||
else
|
||||
{
|
||||
// If module description translation using it's unique id does not exists, we take its description
|
||||
return $this->description;
|
||||
{
|
||||
// If module description translation using it's unique id does not exists, we take use its name to find translation
|
||||
if (is_array($this->langfiles))
|
||||
{
|
||||
foreach($this->langfiles as $val)
|
||||
{
|
||||
if ($val) $langs->load($val);
|
||||
}
|
||||
}
|
||||
return $langs->trans($this->description);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -868,6 +883,8 @@ abstract class DolibarrModules
|
||||
|
||||
$err=0;
|
||||
|
||||
if (empty($this->const)) return 0;
|
||||
|
||||
foreach ($this->const as $key => $value)
|
||||
{
|
||||
$name = $this->const[$key][0];
|
||||
@@ -935,6 +952,8 @@ abstract class DolibarrModules
|
||||
|
||||
$err=0;
|
||||
|
||||
if (empty($this->const)) return 0;
|
||||
|
||||
foreach ($this->const as $key => $value)
|
||||
{
|
||||
$name = $this->const[$key][0];
|
||||
|
||||
@@ -95,17 +95,17 @@ class modDeplacement extends DolibarrModules
|
||||
$this->rights[3][3] = 0;
|
||||
$this->rights[3][4] = 'supprimer';
|
||||
|
||||
$this->rights[3][0] = 174;
|
||||
$this->rights[3][1] = 'Lire toutes les notes de frais';
|
||||
$this->rights[3][2] = 'd';
|
||||
$this->rights[3][3] = 0;
|
||||
$this->rights[3][4] = 'readall';
|
||||
$this->rights[4][0] = 174;
|
||||
$this->rights[4][1] = 'Lire toutes les notes de frais';
|
||||
$this->rights[4][2] = 'd';
|
||||
$this->rights[4][3] = 0;
|
||||
$this->rights[4][4] = 'readall';
|
||||
|
||||
$this->rights[6][0] = 178;
|
||||
$this->rights[6][1] = 'Exporter les notes de frais et deplacements';
|
||||
$this->rights[6][2] = 'd';
|
||||
$this->rights[6][3] = 0;
|
||||
$this->rights[6][4] = 'export';
|
||||
$this->rights[5][0] = 178;
|
||||
$this->rights[5][1] = 'Exporter les notes de frais et deplacements';
|
||||
$this->rights[5][2] = 'd';
|
||||
$this->rights[5][3] = 0;
|
||||
$this->rights[5][4] = 'export';
|
||||
|
||||
// Exports
|
||||
$r=0;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
/* Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -15,42 +16,41 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \defgroup printipp Module printipp
|
||||
* \brief Module pour imprimer via CUPS
|
||||
/** \defgroup printing Module printing
|
||||
* \brief Module for activation of printing icon
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/modPrintIPP.class.php
|
||||
* \ingroup printipp
|
||||
* \brief Fichier de description et activation du module OSCommerce2
|
||||
* \file htdocs/core/modules/modPrinting.class.php
|
||||
* \ingroup printing
|
||||
* \brief Fichier de description et activation du module Printing
|
||||
*/
|
||||
include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php");
|
||||
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \class modPrintIPP
|
||||
* \brief Classe de description et activation du module PrintIPP
|
||||
* \class modPrinting
|
||||
* \brief Classe de description et activation du module Printing
|
||||
*/
|
||||
class modPrintIPP extends DolibarrModules
|
||||
class modPrinting extends DolibarrModules
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
function __construct($db)
|
||||
{
|
||||
$this->db = $db ;
|
||||
$this->numero = 54000;
|
||||
$this->numero = 112000;
|
||||
// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
|
||||
// It is used to group modules in module setup page
|
||||
$this->family = "other";
|
||||
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
|
||||
$this->name = preg_replace('/^mod/i','',get_class($this));
|
||||
$this->description = "Print via Cups IPP Printer.";
|
||||
$this->description = "Enable Printing System.";
|
||||
$this->version = 'dolibarr'; // 'development' or 'experimental' or 'dolibarr' or version
|
||||
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
||||
// Where to store the module in setup page (0=common,1=interface,2=others,3=very specific)
|
||||
@@ -64,16 +64,15 @@ class modPrintIPP extends DolibarrModules
|
||||
$this->dirs = array();
|
||||
|
||||
// Config pages
|
||||
$this->config_page_url = array("printipp.php@printipp");
|
||||
$this->config_page_url = array("printing.php@printing");
|
||||
|
||||
// Dependances
|
||||
$this->hidden = (! empty($_SERVER["WINDIR"]));
|
||||
$this->depends = array();
|
||||
$this->requiredby = array();
|
||||
$this->phpmin = array(5,1); // Minimum version of PHP required by module
|
||||
$this->need_dolibarr_version = array(3,7,-2); // Minimum version of Dolibarr required by module
|
||||
$this->phpmin = array(5,1); // Minimum version of PHP required by module
|
||||
$this->need_dolibarr_version = array(3,7,-2); // Minimum version of Dolibarr required by module
|
||||
$this->conflictwith = array();
|
||||
$this->langfiles = array("printipp");
|
||||
$this->langfiles = array("printing");
|
||||
|
||||
// Constantes
|
||||
$this->const = array();
|
||||
@@ -83,7 +82,7 @@ class modPrintIPP extends DolibarrModules
|
||||
|
||||
// Permissions
|
||||
$this->rights = array();
|
||||
$this->rights_class = 'printipp';
|
||||
$this->rights_class = 'printing';
|
||||
|
||||
$r=0;
|
||||
// $this->rights[$r][0] Id permission (unique tous modules confondus)
|
||||
@@ -94,8 +93,8 @@ class modPrintIPP extends DolibarrModules
|
||||
// $this->rights[$r][5] Niveau 2 pour nommer permission dans code
|
||||
|
||||
$r++;
|
||||
$this->rights[$r][0] = 54001;
|
||||
$this->rights[$r][1] = 'Printer';
|
||||
$this->rights[$r][0] = 112001;
|
||||
$this->rights[$r][1] = 'Printing';
|
||||
$this->rights[$r][2] = 'r';
|
||||
$this->rights[$r][3] = 1;
|
||||
$this->rights[$r][4] = 'read';
|
||||
@@ -106,16 +105,16 @@ class modPrintIPP extends DolibarrModules
|
||||
|
||||
// This is to declare the Top Menu entry:
|
||||
$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Put 0 if this is a top menu
|
||||
'type'=>'left', // This is a Top menu entry
|
||||
'titre'=>'Printer',
|
||||
'mainmenu'=>'printer',
|
||||
'url'=>'/printipp/index.php',
|
||||
'langs'=>'printipp', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
||||
'type'=>'left', // This is a Top menu entry
|
||||
'titre'=>'Printing',
|
||||
'mainmenu'=>'printing',
|
||||
'url'=>'/printing/index.php',
|
||||
'langs'=>'printing', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
||||
'position'=>300,
|
||||
'enabled'=>'$conf->printipp->enabled && $leftmenu==\'modulesadmintools\'',
|
||||
'perms'=>'$user->rights->printipp->read', // Use 'perms'=>'1' if you want your menu with no permission rules
|
||||
'enabled'=>'$conf->printing->enabled && $leftmenu==\'modulesadmintools\'',
|
||||
'perms'=>'$user->rights->printing->read', // Use 'perms'=>'1' if you want your menu with no permission rules
|
||||
'target'=>'',
|
||||
'user'=>0); // 0=Menu for internal users, 1=external users, 2=both
|
||||
'user'=>0); // 0=Menu for internal users, 1=external users, 2=both
|
||||
|
||||
$r++;
|
||||
|
||||
@@ -123,13 +122,13 @@ class modPrintIPP extends DolibarrModules
|
||||
}
|
||||
|
||||
/**
|
||||
* Function called when module is enabled.
|
||||
* The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
|
||||
* It also creates data directories
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
* Function called when module is enabled.
|
||||
* The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
|
||||
* It also creates data directories
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
function init($options='')
|
||||
{
|
||||
$sql = array();
|
||||
@@ -137,15 +136,15 @@ class modPrintIPP extends DolibarrModules
|
||||
return $this->_init($sql, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function called when module is disabled.
|
||||
* Remove from database constants, boxes and permissions from Dolibarr database.
|
||||
* Data directories are not deleted
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
function remove($options='')
|
||||
/**
|
||||
* Function called when module is disabled.
|
||||
* Remove from database constants, boxes and permissions from Dolibarr database.
|
||||
* Data directories are not deleted
|
||||
*
|
||||
* @param string $options Options when enabling module ('', 'noboxes')
|
||||
* @return int 1 if OK, 0 if KO
|
||||
*/
|
||||
function remove($options='')
|
||||
{
|
||||
$sql = array();
|
||||
|
||||
86
htdocs/core/modules/printing/modules_printing.php
Normal file
86
htdocs/core/modules/printing/modules_printing.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/mailings/modules_printing.php
|
||||
* \ingroup printing
|
||||
* \brief File with parent class of printing modules
|
||||
*/
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
|
||||
/**
|
||||
* Parent class of emailing target selectors modules
|
||||
*/
|
||||
class PrintingDriver
|
||||
{
|
||||
var $db;
|
||||
var $error;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
function __construct($db)
|
||||
{
|
||||
$this->db = $db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of printing driver
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
* @param string $maxfilenamelength Max length of value to show
|
||||
* @return array List of drivers
|
||||
*/
|
||||
static function listDrivers($db,$maxfilenamelength=0)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$type='printing';
|
||||
$liste=array();
|
||||
|
||||
$moduledir=DOL_DOCUMENT_ROOT."/core/modules/printing/";
|
||||
$tmpfiles=dol_dir_list($moduledir,'all',0,'\modules.php','','name',SORT_ASC,0);
|
||||
foreach($tmpfiles as $record) {
|
||||
$list[$record['fullname']]=str_replace('.modules.php', '',$record['name']);
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return description of Printing Module
|
||||
*
|
||||
* @return string Return translation of key PrintingModuleDescXXX where XXX is module name, or $this->desc if not exists
|
||||
*/
|
||||
function getDesc()
|
||||
{
|
||||
global $langs;
|
||||
$langs->load("printing");
|
||||
$transstring="PrintingModuleDesc".$this->name;
|
||||
if ($langs->trans($transstring) != $transstring) return $langs->trans($transstring);
|
||||
else return $this->desc;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
355
htdocs/core/modules/printing/printgcp.modules.php
Normal file
355
htdocs/core/modules/printing/printgcp.modules.php
Normal file
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/printing/printgcp.modules.php
|
||||
* \ingroup printing
|
||||
* \brief File to provide printing with Google Cloud Print
|
||||
*/
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
|
||||
|
||||
/**
|
||||
* \class mailing_example
|
||||
* \brief Class to provide printing with Google Cloud Print
|
||||
*/
|
||||
class printing_printgcp extends PrintingDriver
|
||||
{
|
||||
var $name = 'printgcp';
|
||||
var $desc = 'PrintGCPDesc';
|
||||
var $picto = 'printer';
|
||||
var $active = 'PRINTING_PRINTGCP';
|
||||
var $conf = array();
|
||||
var $login = '';
|
||||
var $password = '';
|
||||
var $authtoken = '';
|
||||
var $db;
|
||||
|
||||
const LOGIN_URL = 'https://www.google.com/accounts/ClientLogin';
|
||||
const PRINTERS_SEARCH_URL = 'https://www.google.com/cloudprint/interface/search';
|
||||
const PRINT_URL = 'https://www.google.com/cloudprint/interface/submit';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
function __construct($db)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$this->db = $db;
|
||||
$this->login = $conf->global->PRINTGCP_LOGIN;
|
||||
$this->password = $conf->global->PRINTGCP_PASSWORD;
|
||||
$this->authtoken = $conf->global->PRINTGCP_AUTHTOKEN;
|
||||
$this->conf[] = array('varname'=>'PRINTGCP_LOGIN', 'required'=>1, 'example'=>'user@gmail.com', 'type'=>'text');
|
||||
$this->conf[] = array('varname'=>'PRINTGCP_PASSWORD', 'required'=>1, 'example'=>'', 'type'=>'password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of available printers
|
||||
*
|
||||
* @return string html list of printers
|
||||
*/
|
||||
function listAvailablePrinters()
|
||||
{
|
||||
global $bc, $conf, $langs;
|
||||
$langs->load('printgcp');
|
||||
$var=true;
|
||||
|
||||
$html = '<tr class="liste_titre">';
|
||||
$html.= '<td>'.$langs->trans('GCP_Name').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_displayName').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_Id').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_OwnerName').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_State').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_connectionStatus').'</td>';
|
||||
$html.= '<td>'.$langs->trans('GCP_Type').'</td>';
|
||||
$html.= '<td align="center">'.$langs->trans("Select").'</td>';
|
||||
$html.= '</tr>'."\n";
|
||||
$list = $this->getlist_available_printers();
|
||||
//$html.= '<td><pre>'.print_r($list,true).'</pre></td>';
|
||||
$var = true;
|
||||
foreach ($list['available'] as $printer_det)
|
||||
{
|
||||
$var=!$var;
|
||||
$html.= "<tr ".$bc[$var].">";
|
||||
$html.= '<td>'.$printer_det['name'].'</td>';
|
||||
$html.= '<td>'.$printer_det['displayName'].'</td>';
|
||||
$html.= '<td>'.$printer_det['id'].'</td>'; // id to identify printer to use
|
||||
$html.= '<td>'.$printer_det['ownerName'].'</td>';
|
||||
$html.= '<td>'.$printer_det['status'].'</td>';
|
||||
$html.= '<td>'.$langs->trans('STATE_'.$printer_det['connectionStatus']).'</td>';
|
||||
$html.= '<td>'.$langs->trans('TYPE_'.$printer_det['type']).'</td>';
|
||||
// Defaut
|
||||
$html.= '<td align="center">';
|
||||
if ($conf->global->PRINTING_GCP_DEFAULT == $printer_det['id'])
|
||||
{
|
||||
$html.= img_picto($langs->trans("Default"),'on');
|
||||
}
|
||||
else
|
||||
$html.= '<a href="'.$_SERVER["PHP_SELF"].'?action=setvalue&mode=test&varname=PRINTING_GCP_DEFAULT&driver=printgcp&value='.urlencode($printer_det['id']).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
$html.= '</td>';
|
||||
$html.= '</tr>'."\n";
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of available printers
|
||||
*
|
||||
* @return array list of printers
|
||||
*/
|
||||
function getlist_available_printers()
|
||||
{
|
||||
global $conf,$db;
|
||||
if ($this->authtoken=='') {
|
||||
$this->GoogleLogin();
|
||||
}
|
||||
$ret['available'] = $this->get_printer_detail();
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* List of printers
|
||||
*
|
||||
* @return array list of printers
|
||||
*/
|
||||
function get_printer_detail()
|
||||
{
|
||||
// Check if we have auth token
|
||||
if(empty($this->authtoken)) {
|
||||
// We don't have auth token so throw exception
|
||||
throw new Exception("Please first login to Google by calling loginToGoogle function");
|
||||
}
|
||||
// Prepare auth headers with auth token
|
||||
$authheaders = array("Authorization: GoogleLogin auth=".$this->authtoken,
|
||||
"GData-Version: 3.0",
|
||||
);
|
||||
// Make Http call to get printers added by user to Google Cloud Print
|
||||
$responsedata = $this->makeCurl(self::PRINTERS_SEARCH_URL,array(),$authheaders);
|
||||
$printers = json_decode($responsedata);
|
||||
// Check if we have printers?
|
||||
if(is_null($printers)) {
|
||||
// We dont have printers so return blank array
|
||||
return array();
|
||||
} else {
|
||||
// We have printers so returns printers as array
|
||||
return $this->parsePrinters($printers);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print selected file
|
||||
*
|
||||
* @param string $file file
|
||||
* @param string $module module
|
||||
* @param string $subdir subdir for file
|
||||
* @return string '' if OK, Error message if KO
|
||||
*/
|
||||
function print_file($file, $module, $subdir='')
|
||||
{
|
||||
global $conf, $user, $db;
|
||||
if ($this->authtoken=='') {
|
||||
$this->GoogleLogin();
|
||||
}
|
||||
// si $module=commande_fournisseur alors $conf->fournisseur->commande->dir_output
|
||||
$fileprint=$conf->{$module}->dir_output;
|
||||
if ($subdir!='') $fileprint.='/'.$subdir;
|
||||
$fileprint.='/'.$file;
|
||||
// select printer uri for module order, propal,...
|
||||
$sql = 'SELECT rowid, printer_id, copy FROM '.MAIN_DB_PREFIX.'printing WHERE module="'.$module.'" AND driver="printgcp" AND userid='.$user->id;
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
if ($obj)
|
||||
{
|
||||
$printer_id=$obj->printer_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! empty($conf->global->PRINTING_GCP_DEFAULT))
|
||||
{
|
||||
$printer_id=$conf->global->PRINTING_GCP_DEFAULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'NoDefaultPrinterDefined';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->sendPrintToPrinter($printer_id, $file, $fileprint, 'application/pdf');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends document to the printer
|
||||
*
|
||||
* @param string $printerid Printer id returned by Google Cloud Print
|
||||
* @param string $printjobtitle Job Title
|
||||
* @param string $filepath File Path to be send to Google Cloud Print
|
||||
* @param string $contenttype File content type by example application/pdf, image/png
|
||||
* @return array status array
|
||||
*/
|
||||
public function sendPrintToPrinter($printerid,$printjobtitle,$filepath,$contenttype)
|
||||
{
|
||||
$errors=0;
|
||||
// Check auth token
|
||||
if(empty($this->authtoken)) {
|
||||
$errors++;
|
||||
setEventMessage('Please first login to Google', 'warning');
|
||||
}
|
||||
// Check if printer id
|
||||
if(empty($printerid)) {
|
||||
$errors++;
|
||||
setEventMessage('No provided printer ID', 'warning');
|
||||
}
|
||||
// Open the file which needs to be print
|
||||
$handle = fopen($filepath, "rb");
|
||||
if(!$handle) {
|
||||
$errors++;
|
||||
setEventMessage('Could not read the file.');
|
||||
}
|
||||
// Read file content
|
||||
$contents = fread($handle, filesize($filepath));
|
||||
fclose($handle);
|
||||
// Prepare post fields for sending print
|
||||
$post_fields = array('printerid' => $printerid,
|
||||
'title' => $printjobtitle,
|
||||
'contentTransferEncoding' => 'base64',
|
||||
'content' => base64_encode($contents), // encode file content as base64
|
||||
'contentType' => $contenttype
|
||||
);
|
||||
// Prepare authorization headers
|
||||
$authheaders = array("Authorization: GoogleLogin auth=" . $this->authtoken);
|
||||
// Make http call for sending print Job
|
||||
$response = json_decode($this->makeCurl(self::PRINT_URL,$post_fields,$authheaders));
|
||||
// Has document been successfully sent?
|
||||
if($response->success=="1") {
|
||||
return array('status' =>true,'errorcode' =>'','errormessage'=>"");
|
||||
} else {
|
||||
return array('status' =>false,'errorcode' =>$response->errorCode,'errormessage'=>$response->message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Login into Google Account
|
||||
*
|
||||
* @return string true or false
|
||||
*/
|
||||
function GoogleLogin()
|
||||
{
|
||||
global $db, $conf;
|
||||
// Prepare post fields required for the login
|
||||
$loginpostfields = array("accountType" => "HOSTED_OR_GOOGLE",
|
||||
"Email" => $this->login,
|
||||
"Passwd" => $this->password,
|
||||
"service" => "cloudprint",
|
||||
"source" => "GCP"
|
||||
);
|
||||
// Get the Auth token
|
||||
$loginresponse = $this->makeCurl(self::LOGIN_URL,$loginpostfields);
|
||||
$token = $this->getAuthToken($loginresponse);
|
||||
if(! empty($token)&&!is_null($token)) {
|
||||
$this->authtoken = $token;
|
||||
$result=dolibarr_set_const($db, 'PRINTGCP_AUTHTOKEN', $token, 'chaine', 0, '', $conf->entity);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse json response and return printers array
|
||||
*
|
||||
* @param string $jsonobj Json response object
|
||||
* @return array return array of printers
|
||||
*/
|
||||
private function parsePrinters($jsonobj)
|
||||
{
|
||||
$printers = array();
|
||||
if (isset($jsonobj->printers)) {
|
||||
foreach ($jsonobj->printers as $gcpprinter) {
|
||||
$printers[] = array('id' =>$gcpprinter->id,
|
||||
'name' =>$gcpprinter->name,
|
||||
'defaultDisplayName' =>$gcpprinter->defaultDisplayName,
|
||||
'displayName' =>$gcpprinter->displayName,
|
||||
'ownerId' =>$gcpprinter->ownerId,
|
||||
'ownerName' =>$gcpprinter->ownerName,
|
||||
'connectionStatus' =>$gcpprinter->connectionStatus,
|
||||
'status' =>$gcpprinter->status,
|
||||
'type' =>$gcpprinter->type
|
||||
);
|
||||
}
|
||||
}
|
||||
return $printers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse data to get auth token
|
||||
*
|
||||
* @param string $response response from curl
|
||||
* @return string token
|
||||
*/
|
||||
private function getAuthToken($response)
|
||||
{
|
||||
// Search Auth tag
|
||||
preg_match("/Auth=([a-z0-9_-]+)/i", $response, $matches);
|
||||
$authtoken = @$matches[1];
|
||||
return $authtoken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Curl request
|
||||
*
|
||||
* @param string $url url to hit
|
||||
* @param array $postfields array of post fields
|
||||
* @param array $headers array of http headers
|
||||
* @return array response from curl
|
||||
*/
|
||||
private function makeCurl($url,$postfields=array(),$headers=array())
|
||||
{
|
||||
// Curl Init
|
||||
$curl = curl_init($url);
|
||||
// Curl post request
|
||||
if(! empty($postfields)) {
|
||||
// As is HTTP post curl request so set post fields
|
||||
curl_setopt($curl, CURLOPT_POST, true);
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
|
||||
}
|
||||
// Curl request headers
|
||||
if(! empty($headers)) {
|
||||
// As curl requires header so set headers here
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
||||
}
|
||||
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
// Execute the curl and return response
|
||||
$response = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
284
htdocs/core/modules/printing/printipp.modules.php
Normal file
284
htdocs/core/modules/printing/printipp.modules.php
Normal file
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/printing/printipp.modules.php
|
||||
* \ingroup mailing
|
||||
* \brief File to provide printing with PrintIPP
|
||||
*/
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
|
||||
|
||||
/**
|
||||
* \class mailing_example
|
||||
* \brief Class to provide printing with PrintIPP
|
||||
*/
|
||||
class printing_printipp extends PrintingDriver
|
||||
{
|
||||
var $name='printipp';
|
||||
var $desc='PrintIPPDesc';
|
||||
var $picto='printer';
|
||||
var $active='PRINTING_PRINTIPP';
|
||||
var $conf=array();
|
||||
var $host;
|
||||
var $port;
|
||||
var $userid; /* user login */
|
||||
var $user;
|
||||
var $password;
|
||||
var $error;
|
||||
var $db;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
function __construct($db)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$this->db=$db;
|
||||
$this->host=$conf->global->PRINTIPP_HOST;
|
||||
$this->port=$conf->global->PRINTIPP_PORT;
|
||||
$this->user=$conf->global->PRINTIPP_USER;
|
||||
$this->password=$conf->global->PRINTIPP_PASSWORD;
|
||||
$this->conf[] = array('varname'=>'PRINTIPP_HOST', 'required'=>1, 'example'=>'localhost', 'type'=>'text');
|
||||
$this->conf[] = array('varname'=>'PRINTIPP_PORT', 'required'=>1, 'example'=>'631', 'type'=>'text');
|
||||
$this->conf[] = array('varname'=>'PRINTIPP_USER', 'required'=>0, 'example'=>'', 'type'=>'text');
|
||||
$this->conf[] = array('varname'=>'PRINTIPP_PASSWORD', 'required'=>0, 'example'=>'', 'type'=>'password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Print selected file
|
||||
*
|
||||
* @param string $file file
|
||||
* @param string $module module
|
||||
* @param string $subdir subdirectory of document like for expedition subdir is sendings
|
||||
*
|
||||
* @return string '' if OK, Error message if KO
|
||||
*/
|
||||
function print_file($file, $module, $subdir='')
|
||||
{
|
||||
global $conf, $user, $db;
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
|
||||
|
||||
$ipp = new CupsPrintIPP();
|
||||
$ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
|
||||
$ipp->setHost($this->host);
|
||||
$ipp->setPort($this->port);
|
||||
$ipp->setJobName($file,true);
|
||||
$ipp->setUserName($this->userid);
|
||||
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
|
||||
|
||||
// select printer uri for module order, propal,...
|
||||
$sql = 'SELECT rowid,printer_id,copy FROM '.MAIN_DB_PREFIX.'printing WHERE module="'.$module.'" AND driver="printipp" AND userid='.$user->id;
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
if ($obj)
|
||||
{
|
||||
$ipp->setPrinterURI($obj->printer_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! empty($conf->global->PRINTIPP_URI_DEFAULT))
|
||||
{
|
||||
$ipp->setPrinterURI($conf->global->PRINTIPP_URI_DEFAULT);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'NoDefaultPrinterDefined';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set number of copy
|
||||
$ipp->setCopies($obj->copy);
|
||||
$fileprint=$conf->{$module}->dir_output;
|
||||
if ($subdir!='') $fileprint.='/'.$subdir;
|
||||
$fileprint.='/'.$file;
|
||||
$ipp->setData($fileprint);
|
||||
$ipp->printJob();
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of available printers
|
||||
*
|
||||
* @return string html list of printers
|
||||
*/
|
||||
function listAvailablePrinters()
|
||||
{
|
||||
global $bc, $conf, $langs;
|
||||
$var=true;
|
||||
|
||||
$html = '<tr class="liste_titre">';
|
||||
$html.= '<td>'.$langs->trans('IPP_Uri').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_Name').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_State').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_State_reason').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_State_reason1').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_BW').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_Color').'</td>';
|
||||
//$html.= '<td>'.$langs->trans('IPP_Device').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_Media').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_Supported').'</td>';
|
||||
$html.= '<td align="center">'.$langs->trans("Select").'</td>';
|
||||
$html.= "</tr>\n";
|
||||
$list = $this->getlist_available_printers();
|
||||
$var = true;
|
||||
foreach ($list as $value)
|
||||
{
|
||||
$var=!$var;
|
||||
$printer_det = $this->get_printer_detail($value);
|
||||
$html.= "<tr ".$bc[$var].">";
|
||||
$html.= '<td>'.$value.'</td>';
|
||||
//$html.= '<td><pre>'.print_r($printer_det,true).'</pre></td>';
|
||||
$html.= '<td>'.$printer_det->printer_name->_value0.'</td>';
|
||||
$html.= '<td>'.$langs->trans('STATE_IPP_'.$printer_det->printer_state->_value0).'</td>';
|
||||
$html.= '<td>'.$langs->trans('STATE_IPP_'.$printer_det->printer_state_reasons->_value0).'</td>';
|
||||
$html.= '<td>'.(! empty($printer_det->printer_state_reasons->_value1)?$langs->trans('STATE_IPP_'.$printer_det->printer_state_reasons->_value1):'').'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_COLOR_'.$printer_det->printer_type->_value2).'</td>';
|
||||
$html.= '<td>'.$langs->trans('IPP_COLOR_'.$printer_det->printer_type->_value3).'</td>';
|
||||
//$html.= '<td>'.$printer_det->device_uri->_value0.'</td>';
|
||||
$html.= '<td>'.$printer_det->media_default->_value0.'</td>';
|
||||
$html.= '<td>'.$langs->trans('MEDIA_IPP_'.$printer_det->media_type_supported->_value1).'</td>';
|
||||
// Defaut
|
||||
$html.= '<td align="center">';
|
||||
if ($conf->global->PRINTIPP_URI_DEFAULT == $value)
|
||||
{
|
||||
$html.= img_picto($langs->trans("Default"),'on');
|
||||
}
|
||||
else
|
||||
$html.= '<a href="'.$_SERVER["PHP_SELF"].'?action=setvalue&mode=test&varname=PRINTIPP_URI_DEFAULT&driver=printipp&value='.urlencode($value).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
$html.= '</td>';
|
||||
$html.= '</tr>'."\n";
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of available printers
|
||||
*
|
||||
* @return array list of printers
|
||||
*/
|
||||
function getlist_available_printers()
|
||||
{
|
||||
global $conf,$db;
|
||||
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
|
||||
$ipp = new CupsPrintIPP();
|
||||
$ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
|
||||
$ipp->setHost($this->host);
|
||||
$ipp->setPort($this->port);
|
||||
$ipp->setUserName($this->userid);
|
||||
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
|
||||
$ipp->getPrinters();
|
||||
return $ipp->available_printers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get printer detail
|
||||
*
|
||||
* @param string $uri URI
|
||||
* @return array List of attributes
|
||||
*/
|
||||
function get_printer_detail($uri)
|
||||
{
|
||||
global $conf,$db;
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
|
||||
$ipp = new CupsPrintIPP();
|
||||
$ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
|
||||
$ipp->setHost($this->host);
|
||||
$ipp->setPort($this->port);
|
||||
$ipp->setUserName($this->userid);
|
||||
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
|
||||
$ipp->setPrinterURI($uri);
|
||||
$ipp->getPrinterAttributes();
|
||||
return $ipp->printer_attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* List jobs print
|
||||
*
|
||||
* @param string $module module
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function list_jobs($module)
|
||||
{
|
||||
global $conf, $db, $bc;
|
||||
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
|
||||
$ipp = new CupsPrintIPP();
|
||||
$ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
|
||||
$ipp->setHost($this->host);
|
||||
$ipp->setPort($this->port);
|
||||
$ipp->setUserName($this->userid);
|
||||
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
|
||||
// select printer uri for module order, propal,...
|
||||
$sql = 'SELECT rowid,printer_uri,printer_name FROM '.MAIN_DB_PREFIX.'printer_ipp WHERE module="'.$module.'"';
|
||||
$result = $this->db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
if ($obj)
|
||||
{
|
||||
$ipp->setPrinterURI($obj->printer_uri);
|
||||
}
|
||||
else
|
||||
{
|
||||
// All printers
|
||||
$ipp->setPrinterURI("ipp://localhost:631/printers/");
|
||||
}
|
||||
}
|
||||
// Getting Jobs
|
||||
$ipp->getJobs(false,0,'completed',false);
|
||||
print '<table width="100%" class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>Id</td>";
|
||||
print "<td>Owner</td>";
|
||||
print "<td>Printer</td>";
|
||||
print "<td>File</td>";
|
||||
print "<td>Status</td>";
|
||||
print "<td>Cancel</td>";
|
||||
print "</tr>\n";
|
||||
$jobs = $ipp->jobs_attributes;
|
||||
$var = True;
|
||||
//print '<pre>'.print_r($jobs,true).'</pre>';
|
||||
foreach ($jobs as $value )
|
||||
{
|
||||
$var=!$var;
|
||||
print "<tr ".$bc[$var].">";
|
||||
print '<td>'.$value->job_id->_value0.'</td>';
|
||||
print '<td>'.$value->job_originating_user_name->_value0.'</td>';
|
||||
print '<td>'.$value->printer_uri->_value0.'</td>';
|
||||
print '<td>'.$value->job_name->_value0.'</td>';
|
||||
print '<td>'.$value->job_state->_value0.'</td>';
|
||||
print '<td>'.$value->job_uri->_value0.'</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
print "</table>";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -125,7 +125,8 @@ class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -353,16 +353,20 @@ if (($action=="create") || ($action=="edit"))
|
||||
print "<tr><td>";
|
||||
print $langs->trans('CronEvery')."</td>";
|
||||
print "<td><select name=\"nbfrequency\">";
|
||||
for($i=1; $i<=60; $i++){
|
||||
if(($object->frequency/$object->unitfrequency) == $i){
|
||||
for($i=1; $i<=60; $i++)
|
||||
{
|
||||
if (! empty($object->unitfrequency) && ($object->frequency/$object->unitfrequency) == $i)
|
||||
{
|
||||
print "<option value='".$i."' selected='selected'>".$i."</option>";
|
||||
}
|
||||
else{
|
||||
else
|
||||
{
|
||||
print "<option value='".$i."'>".$i."</option>";
|
||||
}
|
||||
}
|
||||
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"60\" id=\"frequency_minute\" ";
|
||||
if($object->unitfrequency=="60"){
|
||||
if($object->unitfrequency=="60")
|
||||
{
|
||||
$input .= ' checked="checked" />';
|
||||
}
|
||||
else{
|
||||
|
||||
8
htdocs/custom/.gitignore
vendored
8
htdocs/custom/.gitignore
vendored
@@ -1,4 +1,4 @@
|
||||
/a*
|
||||
/b*
|
||||
/c*
|
||||
/d*
|
||||
/*
|
||||
!.gitignore
|
||||
!README.md
|
||||
!index.html
|
||||
@@ -108,477 +108,313 @@ $parameters=array();
|
||||
$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 ($action == 'add')
|
||||
if (empty($reshook))
|
||||
{
|
||||
$error=0;
|
||||
|
||||
$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
|
||||
if ($action == 'add')
|
||||
{
|
||||
$langs->load("errors");
|
||||
setEventMessage($langs->trans($object->error),'errors');
|
||||
}
|
||||
}
|
||||
$error=0;
|
||||
|
||||
else if ($action == 'reopen' && $user->rights->expedition->valider)
|
||||
{
|
||||
$result = $object->setStatut(0);
|
||||
if ($result < 0)
|
||||
{
|
||||
$mesg = $object->error;
|
||||
}
|
||||
}
|
||||
$db->begin();
|
||||
|
||||
else if ($action == 'setdate_livraison' && $user->rights->expedition->creer)
|
||||
{
|
||||
//print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year'];
|
||||
$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->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');
|
||||
|
||||
$object->fetch($id);
|
||||
$result=$object->set_date_livraison($user,$datedelivery);
|
||||
if ($result < 0)
|
||||
{
|
||||
$mesg='<div class="error">'.$object->error.'</div>';
|
||||
}
|
||||
}
|
||||
$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'));
|
||||
|
||||
// Action update description of emailing
|
||||
else if ($action == 'settrackingnumber' || $action == 'settrackingurl'
|
||||
|| $action == 'settrueWeight'
|
||||
|| $action == 'settrueWidth'
|
||||
|| $action == 'settrueHeight'
|
||||
|| $action == 'settrueDepth'
|
||||
|| $action == 'setshipping_method_id')
|
||||
{
|
||||
$error=0;
|
||||
// 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);
|
||||
|
||||
if ($action == 'settrackingnumber') $object->tracking_number = trim(GETPOST('trackingnumber','alpha'));
|
||||
if ($action == 'settrackingurl') $object->tracking_url = trim(GETPOST('trackingurl','int'));
|
||||
if ($action == 'settrueWeight') {
|
||||
$object->trueWeight = trim(GETPOST('trueWeight','int'));
|
||||
$object->weight_units = GETPOST('weight_units','int');
|
||||
}
|
||||
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');
|
||||
$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';
|
||||
}
|
||||
}
|
||||
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)
|
||||
{
|
||||
if ($object->update($user) >= 0)
|
||||
{
|
||||
header("Location: card.php?id=".$object->id);
|
||||
exit;
|
||||
}
|
||||
setEventMessage($object->error,'errors');
|
||||
}
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
$action="";
|
||||
}
|
||||
else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->expedition->valider)
|
||||
{
|
||||
$object->fetch_thirdparty();
|
||||
|
||||
// Build document
|
||||
else if ($action == 'builddoc') // En get ou en post
|
||||
{
|
||||
$result = $object->valid($user);
|
||||
|
||||
// Save last template used to generate document
|
||||
if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
|
||||
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
|
||||
|
||||
// Define output language
|
||||
$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=$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;
|
||||
}
|
||||
}
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete file in doc form
|
||||
elseif ($action == 'remove_file')
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
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");
|
||||
setEventMessage($langs->trans($object->error),'errors');
|
||||
}
|
||||
}
|
||||
|
||||
$upload_dir = $conf->expedition->dir_output . "/sending";
|
||||
$file = $upload_dir . '/' . GETPOST('file');
|
||||
$ret=dol_delete_file($file,0,0,0,$object);
|
||||
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
|
||||
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
|
||||
}
|
||||
else if ($action == 'reopen' && $user->rights->expedition->valider)
|
||||
{
|
||||
$result = $object->setStatut(0);
|
||||
if ($result < 0)
|
||||
{
|
||||
$mesg = $object->error;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add file in email form
|
||||
*/
|
||||
if (GETPOST('addfile','alpha'))
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
else if ($action == 'setdate_livraison' && $user->rights->expedition->creer)
|
||||
{
|
||||
//print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year'];
|
||||
$datedelivery=dol_mktime(GETPOST('liv_hour','int'), GETPOST('liv_min','int'), 0, GETPOST('liv_month','int'), GETPOST('liv_day','int'), GETPOST('liv_year','int'));
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
$object->fetch($id);
|
||||
$result=$object->set_date_livraison($user,$datedelivery);
|
||||
if ($result < 0)
|
||||
{
|
||||
$mesg='<div class="error">'.$object->error.'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
dol_add_file_process($upload_dir_tmp,0,0);
|
||||
$action ='presend';
|
||||
}
|
||||
// Action update description of emailing
|
||||
else if ($action == 'settrackingnumber' || $action == 'settrackingurl'
|
||||
|| $action == 'settrueWeight'
|
||||
|| $action == 'settrueWidth'
|
||||
|| $action == 'settrueHeight'
|
||||
|| $action == 'settrueDepth'
|
||||
|| $action == 'setshipping_method_id')
|
||||
{
|
||||
$error=0;
|
||||
|
||||
/*
|
||||
* Remove file in email form
|
||||
*/
|
||||
if (GETPOST('removedfile','alpha'))
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
if ($action == 'settrackingnumber') $object->tracking_number = trim(GETPOST('trackingnumber','alpha'));
|
||||
if ($action == 'settrackingurl') $object->tracking_url = trim(GETPOST('trackingurl','int'));
|
||||
if ($action == 'settrueWeight') {
|
||||
$object->trueWeight = trim(GETPOST('trueWeight','int'));
|
||||
$object->weight_units = GETPOST('weight_units','int');
|
||||
}
|
||||
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
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
if (! $error)
|
||||
{
|
||||
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
|
||||
dol_remove_file_process(GETPOST('removedfile','int'),0);
|
||||
$action ='presend';
|
||||
}
|
||||
$action="";
|
||||
}
|
||||
|
||||
/*
|
||||
* Send mail
|
||||
*/
|
||||
if ($action == 'send' && ! GETPOST('addfile','alpha') && ! GETPOST('removedfile','alpha') && ! GETPOST('cancel','alpha'))
|
||||
{
|
||||
$langs->load('mails');
|
||||
// Build document
|
||||
else if ($action == 'builddoc') // En get ou en post
|
||||
{
|
||||
// Save last template used to generate document
|
||||
if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
|
||||
|
||||
// $ref = dol_sanitizeFileName($object->ref);
|
||||
// $file = $conf->expedition->dir_output . '/sending/' . $ref . '/' . $ref . '.pdf';
|
||||
// Define output language
|
||||
$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=$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;
|
||||
}
|
||||
}
|
||||
|
||||
// if (is_readable($file))
|
||||
// {
|
||||
if (GETPOST('sendto','alpha'))
|
||||
{
|
||||
// Le destinataire a ete fourni via le champ libre
|
||||
$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');
|
||||
}
|
||||
}
|
||||
// Delete file in doc form
|
||||
elseif ($action == 'remove_file')
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
if (dol_strlen($sendto))
|
||||
{
|
||||
$langs->load("commercial");
|
||||
$upload_dir = $conf->expedition->dir_output . "/sending";
|
||||
$file = $upload_dir . '/' . GETPOST('file');
|
||||
$ret=dol_delete_file($file,0,0,0,$object);
|
||||
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
|
||||
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
|
||||
}
|
||||
|
||||
$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');
|
||||
elseif ($action == 'classifybilled')
|
||||
{
|
||||
$object->fetch($id);
|
||||
$object->set_billed();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
|
||||
|
||||
// Create form object
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
||||
$formmail = new FormMail($db);
|
||||
// Actions to send emails
|
||||
if (empty($id)) $id=$facid;
|
||||
$actiontypecode='AC_SHIP';
|
||||
$trigger_name='SHIPPING_SENTBYMAIL';
|
||||
$paramname='id';
|
||||
$mode='emailfromshipment';
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
||||
|
||||
$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
|
||||
{
|
||||
$langs->load("errors");
|
||||
$mesg='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>';
|
||||
dol_syslog('Failed to read file: '.$file);
|
||||
}*/
|
||||
}
|
||||
|
||||
else if ($action == 'classifybilled')
|
||||
{
|
||||
$object->fetch($id);
|
||||
$object->set_billed();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -121,21 +121,30 @@ class Expedition extends CommonObject
|
||||
global $db, $langs, $conf;
|
||||
$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
|
||||
$classname = $conf->global->EXPEDITION_ADDON_NUMBER;
|
||||
// Include file with class
|
||||
$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();
|
||||
$numref = "";
|
||||
$numref = $obj->getNextValue($soc,$this);
|
||||
@@ -149,12 +158,12 @@ class Expedition extends CommonObject
|
||||
dol_print_error($db,get_class($this)."::getNextNumRef ".$obj->error);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_NUMBER_NotDefined");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_NUMBER_NotDefined");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -574,25 +574,33 @@ class Fichinter extends CommonObject
|
||||
global $conf, $db, $langs;
|
||||
$langs->load("interventions");
|
||||
|
||||
$dir = DOL_DOCUMENT_ROOT . "/core/modules/fichinter/";
|
||||
|
||||
if (! empty($conf->global->FICHEINTER_ADDON))
|
||||
{
|
||||
$file = $conf->global->FICHEINTER_ADDON.".php";
|
||||
$classname = $conf->global->FICHEINTER_ADDON;
|
||||
if (! file_exists($dir.$file))
|
||||
{
|
||||
$file='mod_'.$file;
|
||||
$classname='mod_'.$classname;
|
||||
$mybool = false;
|
||||
|
||||
$file = "mod_".$conf->global->FICHEINTER_ADDON.".php";
|
||||
$classname = "mod_".$conf->global->FICHEINTER_ADDON;
|
||||
|
||||
// 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
|
||||
require_once $dir.$file;
|
||||
if (! $mybool)
|
||||
{
|
||||
dol_print_error('',"Failed to include file ".$file);
|
||||
return '';
|
||||
}
|
||||
|
||||
$obj = new $classname();
|
||||
|
||||
$numref = "";
|
||||
$numref = $obj->getNumRef($soc,$this);
|
||||
$numref = $obj->getNextValue($soc,$this);
|
||||
|
||||
if ( $numref != "")
|
||||
{
|
||||
@@ -606,6 +614,7 @@ class Fichinter extends CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("errors");
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined");
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ $langs->load('companies');
|
||||
$langs->load('commercial');
|
||||
|
||||
$action = GETPOST('action');
|
||||
$cancelbutton = GETPOST('cancel');
|
||||
|
||||
// Security check
|
||||
$id = (GETPOST('socid','int') ? GETPOST('socid','int') : GETPOST('id','int'));
|
||||
@@ -60,10 +61,14 @@ $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 ($action == 'setsupplieraccountancycode')
|
||||
if (empty($reshook))
|
||||
{
|
||||
$cancelbutton = GETPOST('cancel');
|
||||
if (! $cancelbutton)
|
||||
if ($cancelbutton)
|
||||
{
|
||||
$action = "";
|
||||
}
|
||||
|
||||
if ($action == 'setsupplieraccountancycode')
|
||||
{
|
||||
$result=$object->fetch($id);
|
||||
$object->code_compta_fournisseur=$_POST["supplieraccountancycode"];
|
||||
@@ -73,21 +78,20 @@ if ($action == 'setsupplieraccountancycode')
|
||||
$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);
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -557,44 +557,48 @@ class CommandeFournisseur extends CommonOrder
|
||||
global $db, $langs, $conf;
|
||||
$langs->load("orders");
|
||||
|
||||
$dir = DOL_DOCUMENT_ROOT .'/core/modules/supplier_order/';
|
||||
|
||||
if (! empty($conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER))
|
||||
{
|
||||
$mybool = false;
|
||||
|
||||
$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
|
||||
$modName=$conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER;
|
||||
require_once $dir.'/'.$file;
|
||||
dol_print_error('',"Failed to include file ".$file);
|
||||
return '';
|
||||
}
|
||||
|
||||
// Recuperation de la nouvelle reference
|
||||
$objMod = new $modName($this->db);
|
||||
$obj = new $classname();
|
||||
$numref = $obj->getNextValue($soc,$this);
|
||||
|
||||
$numref = "";
|
||||
$numref = $objMod->commande_get_num($soc,$this);
|
||||
|
||||
if ( $numref != "")
|
||||
{
|
||||
return $numref;
|
||||
}
|
||||
else
|
||||
{
|
||||
dol_print_error($db, get_class($this)."::getNextNumRef ".$obj->error);
|
||||
return -1;
|
||||
}
|
||||
if ( $numref != "")
|
||||
{
|
||||
return $numref;
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_FailedToLoad_COMMANDE_SUPPLIER_ADDON_File",$conf->global->COMMANDE_SUPPLIER_ADDON_NUMBER);
|
||||
return -2;
|
||||
{
|
||||
$this->error = $obj->error;
|
||||
dol_print_error($db, get_class($this)."::getNextNumRef ".$obj->error);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_SUPPLIER_ADDON_NotDefined");
|
||||
return -3;
|
||||
{
|
||||
$this->error = "Error_COMMANDE_SUPPLIER_ADDON_NotDefined";
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1514,10 +1514,14 @@ class FactureFournisseur extends CommonInvoice
|
||||
|
||||
$file = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER.".php";
|
||||
$classname = $conf->global->INVOICE_SUPPLIER_ADDON_NUMBER;
|
||||
|
||||
// Include file with class
|
||||
foreach ($conf->file->dol_document_root as $dirroot)
|
||||
{
|
||||
$dir = $dirroot."/core/modules/supplier_invoice/";
|
||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||
|
||||
foreach ($dirmodels as $reldir) {
|
||||
|
||||
$dir = dol_buildpath($reldir."core/modules/supplier_invoice/");
|
||||
|
||||
// Load file with numbering class (if found)
|
||||
$mybool|=@include_once $dir.$file;
|
||||
}
|
||||
|
||||
@@ -479,14 +479,16 @@ else if ($action == 'confirm_deleteproductline' && $confirm == 'yes' && $user->r
|
||||
$result = $object->deleteline(GETPOST('lineid'));
|
||||
if ($result >= 0)
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
if (GETPOST('lang_id'))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang(GETPOST('lang_id'));
|
||||
}
|
||||
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);
|
||||
}
|
||||
$ret=$object->fetch($object->id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
@@ -571,6 +573,14 @@ else if ($action == 'confirm_approve' && $confirm == 'yes' && $user->rights->fou
|
||||
if ($result > 0)
|
||||
{
|
||||
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);
|
||||
}
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
header("Location: ".$_SERVER["PHP_SELF"]."?id=".$object->id);
|
||||
|
||||
@@ -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
|
||||
$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
|
||||
*/
|
||||
|
||||
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'));
|
||||
$paiement_id = 0;
|
||||
$totalpayment = 0;
|
||||
$atleastonepaymentnotnull = 0;
|
||||
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
|
||||
$paiement_id = 0;
|
||||
$totalpayment = 0;
|
||||
$atleastonepaymentnotnull = 0;
|
||||
|
||||
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date
|
||||
$tmpinvoice=new FactureFournisseur($db);
|
||||
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])))
|
||||
// Generate payment array and check if there is payment higher than invoice and payment date before invoice date
|
||||
$tmpinvoice=new FactureFournisseur($db);
|
||||
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])
|
||||
{
|
||||
$addwarning=1;
|
||||
$formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPaySupplier")).' '.$langs->trans("HelpPaymentHigherThanReminderToPaySupplier");
|
||||
// Check amount
|
||||
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");
|
||||
//$error++;
|
||||
setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
|
||||
setEventMessage($paiement->error, 'errors');
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$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 ($_POST['paiementid'] <= 0)
|
||||
{
|
||||
setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
|
||||
$error++;
|
||||
}
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
|
||||
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++;
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
@@ -458,7 +461,7 @@ if (empty($action))
|
||||
$search_paymenttype=GETPOST('search_paymenttype');
|
||||
$search_amount=GETPOST('search_amount');
|
||||
$search_company=GETPOST('search_company');
|
||||
|
||||
|
||||
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
||||
{
|
||||
$search_ref="";
|
||||
@@ -596,7 +599,7 @@ if (empty($action))
|
||||
print '<td class="nowrap">';
|
||||
print $invoicesupplierstatic->getNomUrl(1);
|
||||
print '</td>';*/
|
||||
|
||||
|
||||
print '<td> </td>';
|
||||
print '</tr>';
|
||||
$i++;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
|
||||
|
||||
/* @(#) $Header: /sources/phpprintipp/phpprintipp/php_classes/CupsPrintIPP.php,v 1.1 2008/06/21 00:30:56 harding Exp $
|
||||
*
|
||||
* Class PrintIPP - Send extended IPP requests.
|
||||
@@ -22,11 +22,10 @@
|
||||
*
|
||||
* mailto:thomas.harding@laposte.net
|
||||
* Thomas Harding, 56 rue de la bourie rouge, 45 000 ORLEANS -- FRANCE
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
This class is intended to implement Internet Printing Protocol on client side.
|
||||
|
||||
References needed to debug / add functionnalities:
|
||||
@@ -39,57 +38,64 @@
|
||||
|
||||
require_once("ExtendedPrintIPP.php");
|
||||
|
||||
class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
|
||||
// {{{ variables declaration
|
||||
|
||||
class CupsPrintIPP extends ExtendedPrintIPP
|
||||
{
|
||||
public $printers_attributes;
|
||||
public $defaults_attributes;
|
||||
|
||||
// }}}
|
||||
|
||||
// {{{ constructor
|
||||
public function __construct() {
|
||||
protected $parsed;
|
||||
protected $output;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
self::_initTags();
|
||||
}
|
||||
// }}}
|
||||
|
||||
//
|
||||
// OPERATIONS
|
||||
//
|
||||
public function cupsGetDefaults($attributes=array("all"))
|
||||
{
|
||||
//The CUPS-Get-Default operation returns the default printer URI and attributes
|
||||
|
||||
// {{{ cupsGetDefaults ($attributes="all")
|
||||
public function cupsGetDefaults($attributes=array("all")) {
|
||||
//The CUPS-Get-Default operation returns the default printer URI and attributes
|
||||
|
||||
$this->jobs = array_merge($this->jobs,array(""));
|
||||
$this->jobs_uri = array_merge($this->jobs_uri,array(""));
|
||||
$this->parsed = array();
|
||||
unset($this->printer_attributes);
|
||||
|
||||
|
||||
if (!isset($this->setup->charset))
|
||||
self::setCharset('us-ascii');
|
||||
|
||||
{
|
||||
self::setCharset();
|
||||
}
|
||||
|
||||
if (!isset($this->setup->language))
|
||||
{
|
||||
self::setLanguage('en');
|
||||
|
||||
}
|
||||
|
||||
self::_setOperationId();
|
||||
|
||||
|
||||
for($i = 0 ; $i < count($attributes) ; $i++)
|
||||
{
|
||||
if ($i == 0)
|
||||
{
|
||||
$this->meta->attributes = chr(0x44) // Keyword
|
||||
. self::_giveMeStringLength('requested-attributes')
|
||||
. 'requested-attributes'
|
||||
. self::_giveMeStringLength($attributes[0])
|
||||
. $attributes[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->meta->attributes .= chr(0x44) // Keyword
|
||||
. chr(0x0).chr(0x0) // zero-length name
|
||||
. self::_giveMeStringLength($attributes[$i])
|
||||
. $attributes[$i];
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
}
|
||||
}
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
. chr(0x40). chr(0x01) // operation: cups vendor extension: get defaults
|
||||
. $this->meta->operation_id // request-id
|
||||
. chr(0x01) // start operation-attributes | operation-attributes-tag
|
||||
@@ -97,69 +103,83 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
. $this->meta->language
|
||||
. $this->meta->attributes
|
||||
. chr(0x03); // end operations attribute
|
||||
|
||||
|
||||
$this->output = $this->stringjob;
|
||||
|
||||
|
||||
self::_putDebug("Request: ".$this->output);
|
||||
|
||||
|
||||
$post_values = array( "Content-Type" => "application/ipp",
|
||||
"Data" => $this->output);
|
||||
|
||||
if (self::_sendHttp ($post_values,'/')) {
|
||||
|
||||
|
||||
if (self::_sendHttp ($post_values,'/'))
|
||||
{
|
||||
|
||||
if(self::_parseServerOutput())
|
||||
{
|
||||
self::_parsePrinterAttributes();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->attributes = &$this->printer_attributes;
|
||||
|
||||
if (isset($this->printer_attributes->printer_type)) {
|
||||
|
||||
if (isset($this->printer_attributes->printer_type))
|
||||
{
|
||||
$printer_type = $this->printer_attributes->printer_type->_value0;
|
||||
$table = self::_interpretPrinterType($printer_type);
|
||||
|
||||
for($i = 0 ; $i < count($table) ; $i++ ) {
|
||||
|
||||
for($i = 0 ; $i < count($table) ; $i++ )
|
||||
{
|
||||
$index = '_value'.$i;
|
||||
$this->printer_attributes->printer_type->$index = $table[$i];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status)) {
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status))
|
||||
{
|
||||
|
||||
$this->status = array_merge($this->status,array($this->serveroutput->status));
|
||||
if ($this->serveroutput->status == "successfull-ok")
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,3);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,1);
|
||||
|
||||
return $this->serveroutput->status;
|
||||
|
||||
} else {
|
||||
}
|
||||
|
||||
return $this->serveroutput->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->status = array_merge($this->status,array("OPERATION FAILED"));
|
||||
self::_errorLog("getting defaults : OPERATION FAILED",1);
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ cupsAcceptJobs ($printer_uri)
|
||||
public function cupsAcceptJobs($printer_uri) {
|
||||
|
||||
|
||||
public function cupsAcceptJobs($printer_uri)
|
||||
{
|
||||
//The CUPS-Get-Default operation returns the default printer URI and attributes
|
||||
|
||||
|
||||
$this->jobs = array_merge($this->jobs,array(""));
|
||||
$this->jobs_uri = array_merge($this->jobs_uri,array(""));
|
||||
$this->parsed = array();
|
||||
unset($this->printer_attributes);
|
||||
|
||||
|
||||
if (!isset($this->setup->charset))
|
||||
self::setCharset('us-ascii');
|
||||
|
||||
{
|
||||
self::setCharset();
|
||||
}
|
||||
|
||||
if (!isset($this->setup->language))
|
||||
{
|
||||
self::setLanguage('en');
|
||||
|
||||
}
|
||||
|
||||
self::_setOperationId();
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
. chr(0x40). chr(0x08) // operation: cups vendor extension: Accept-Jobs
|
||||
. $this->meta->operation_id // request-id
|
||||
. chr(0x01) // start operation-attributes | operation-attributes-tag
|
||||
@@ -171,65 +191,80 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
. self::_giveMeStringLength($printer_uri)
|
||||
. $printer_uri
|
||||
. chr(0x03); // end operations attribute
|
||||
|
||||
|
||||
$this->output = $this->stringjob;
|
||||
|
||||
|
||||
self::_putDebug("Request: ".$this->output);
|
||||
|
||||
|
||||
$post_values = array( "Content-Type" => "application/ipp",
|
||||
"Data" => $this->output);
|
||||
|
||||
if (self::_sendHttp ($post_values,'/admin/')) {
|
||||
|
||||
|
||||
if (self::_sendHttp ($post_values,'/admin/'))
|
||||
{
|
||||
|
||||
if(self::_parseServerOutput())
|
||||
{
|
||||
self::_parseAttributes();
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status)) {
|
||||
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status))
|
||||
{
|
||||
|
||||
$this->status = array_merge($this->status,array($this->serveroutput->status));
|
||||
if ($this->serveroutput->status == "successfull-ok")
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,3);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,1);
|
||||
|
||||
return $this->serveroutput->status;
|
||||
|
||||
} else {
|
||||
}
|
||||
|
||||
return $this->serveroutput->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->status = array_merge($this->status,array("OPERATION FAILED"));
|
||||
self::_errorLog("getting defaults : OPERATION FAILED",1);
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ cupsRejectJobs ($printer_uri,$printer_state_message=false)
|
||||
public function cupsRejectJobs($printer_uri,$printer_state_message) {
|
||||
|
||||
public function cupsRejectJobs($printer_uri,$printer_state_message)
|
||||
{
|
||||
//The CUPS-Get-Default operation returns the default printer URI and attributes
|
||||
|
||||
|
||||
$this->jobs = array_merge($this->jobs,array(""));
|
||||
$this->jobs_uri = array_merge($this->jobs_uri,array(""));
|
||||
$this->parsed = array();
|
||||
unset($this->attributes);
|
||||
|
||||
|
||||
if (!isset($this->setup->charset))
|
||||
self::setCharset('us-ascii');
|
||||
|
||||
{
|
||||
self::setCharset();
|
||||
}
|
||||
|
||||
if (!isset($this->setup->language))
|
||||
{
|
||||
self::setLanguage('en');
|
||||
|
||||
}
|
||||
|
||||
self::_setOperationId();
|
||||
|
||||
|
||||
$message = "";
|
||||
if ($printer_state_message)
|
||||
{
|
||||
$message = chr(0x04) // start printer-attributes
|
||||
. chr(0x41) // textWithoutLanguage
|
||||
. self::_giveMeStringLength("printer-state-message")
|
||||
. "printer-state-message"
|
||||
. self::_giveMeStringLength($printer_state_message)
|
||||
. $printer_state_message;
|
||||
}
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
. chr(0x40). chr(0x09) // operation: cups vendor extension: Reject-Jobs
|
||||
. $this->meta->operation_id // request-id
|
||||
. chr(0x01) // start operation-attributes | operation-attributes-tag
|
||||
@@ -242,89 +277,111 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
. $printer_uri
|
||||
. $message
|
||||
. chr(0x03); // end operations attribute
|
||||
|
||||
|
||||
$this->output = $this->stringjob;
|
||||
|
||||
|
||||
self::_putDebug("Request: ".$this->output);
|
||||
|
||||
|
||||
$post_values = array( "Content-Type" => "application/ipp",
|
||||
"Data" => $this->output);
|
||||
|
||||
if (self::_sendHttp ($post_values,'/admin/')) {
|
||||
|
||||
|
||||
if (self::_sendHttp ($post_values,'/admin/'))
|
||||
{
|
||||
|
||||
if(self::_parseServerOutput())
|
||||
{
|
||||
self::_parseAttributes();
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status)) {
|
||||
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status))
|
||||
{
|
||||
|
||||
$this->status = array_merge($this->status,array($this->serveroutput->status));
|
||||
if ($this->serveroutput->status == "successfull-ok")
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,3);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::_errorLog("getting defaults: ".$this->serveroutput->status,1);
|
||||
|
||||
return $this->serveroutput->status;
|
||||
|
||||
} else {
|
||||
}
|
||||
|
||||
return $this->serveroutput->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->status = array_merge($this->status,array("OPERATION FAILED"));
|
||||
self::_errorLog("getting defaults : OPERATION FAILED",1);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ getPrinters()
|
||||
public function getPrinters($printer_location=false,$printer_info=false,$attributes=array()) {
|
||||
|
||||
|
||||
public function getPrinters($printer_location=false,$printer_info=false,$attributes=array())
|
||||
{
|
||||
if (count($attributes) == 0)
|
||||
true;
|
||||
$attributes=array('printer-uri-supported','printer-location','printer-info','printer-type','color-supported');
|
||||
{
|
||||
true;
|
||||
}
|
||||
$attributes=array('printer-uri-supported', 'printer-location', 'printer-info', 'printer-type', 'color-supported', 'printer-name');
|
||||
$this->jobs = array_merge($this->jobs,array(""));
|
||||
$this->jobs_uri = array_merge($this->jobs_uri,array(""));
|
||||
|
||||
|
||||
unset ($this->printers_attributes);
|
||||
|
||||
|
||||
if (!isset($this->setup->charset))
|
||||
self::setCharset('us-ascii');
|
||||
|
||||
{
|
||||
self::setCharset();
|
||||
}
|
||||
|
||||
if (!isset($this->setup->language))
|
||||
{
|
||||
self::setLanguage('en-us');
|
||||
|
||||
}
|
||||
|
||||
self::_setOperationId();
|
||||
|
||||
|
||||
$this->meta->attributes='';
|
||||
|
||||
|
||||
if ($printer_location)
|
||||
{
|
||||
$this->meta->attributes .= chr(0x41) // textWithoutLanguage
|
||||
. self::_giveMeStringLength('printer-location')
|
||||
. 'printer-location'
|
||||
. self::_giveMeStringLength($printer_location)
|
||||
. $printer_location;
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ($printer_info)
|
||||
{
|
||||
$this->meta->attributes .= chr(0x41) // textWithoutLanguage
|
||||
. self::_giveMeStringLength('printer-info')
|
||||
. 'printer-info'
|
||||
. self::_giveMeStringLength($printer_info)
|
||||
. $printer_info;
|
||||
|
||||
}
|
||||
|
||||
for($i = 0 ; $i < count($attributes) ; $i++)
|
||||
{
|
||||
if ($i == 0)
|
||||
{
|
||||
$this->meta->attributes .= chr(0x44) // Keyword
|
||||
. self::_giveMeStringLength('requested-attributes')
|
||||
. 'requested-attributes'
|
||||
. self::_giveMeStringLength($attributes[0])
|
||||
. $attributes[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->meta->attributes .= chr(0x44) // Keyword
|
||||
. chr(0x0).chr(0x0) // zero-length name
|
||||
. self::_giveMeStringLength($attributes[$i])
|
||||
. $attributes[$i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
$this->stringjob = chr(0x01) . chr(0x01) // IPP version 1.1
|
||||
. chr(0x40). chr(0x02) // operation: cups vendor extension: get printers
|
||||
. $this->meta->operation_id // request-id
|
||||
. chr(0x01) // start operation-attributes | operation-attributes-tag
|
||||
@@ -332,78 +389,89 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
. $this->meta->language
|
||||
. $this->meta->attributes
|
||||
. chr(0x03); // end operations attribute
|
||||
|
||||
|
||||
$this->output = $this->stringjob;
|
||||
|
||||
|
||||
$post_values = array( "Content-Type" => "application/ipp",
|
||||
"Data" => $this->output);
|
||||
|
||||
if (self::_sendHttp ($post_values,'/')) {
|
||||
|
||||
if(self::_parseServerOutput())
|
||||
$this->_getAvailablePrinters();
|
||||
|
||||
if (self::_sendHttp ($post_values,'/'))
|
||||
{
|
||||
|
||||
if(self::_parseServerOutput())
|
||||
{
|
||||
$this->_getAvailablePrinters();
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status)) {
|
||||
|
||||
}
|
||||
|
||||
if (isset($this->serveroutput) && isset($this->serveroutput->status))
|
||||
{
|
||||
|
||||
$this->status = array_merge($this->status,array($this->serveroutput->status));
|
||||
if ($this->serveroutput->status == "successfull-ok")
|
||||
{
|
||||
self::_errorLog("getting printers: ".$this->serveroutput->status,3);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::_errorLog("getting printers: ".$this->serveroutput->status,1);
|
||||
return $this->serveroutput->status;
|
||||
|
||||
} else {
|
||||
}
|
||||
return $this->serveroutput->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->status = array_merge($this->status,array("OPERATION FAILED"));
|
||||
self::_errorLog("getting printers : OPERATION FAILED",1);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ cupsGetPrinters ()
|
||||
public function cupsGetPrinters () {
|
||||
// alias for getPrinters();
|
||||
|
||||
public function cupsGetPrinters ()
|
||||
{
|
||||
// alias for getPrinters();
|
||||
self::getPrinters();
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ getPrinterAttributes()
|
||||
public function getPrinterAttributes() {
|
||||
// complete informations from parent with Cups-specific stuff
|
||||
|
||||
|
||||
public function getPrinterAttributes()
|
||||
{
|
||||
// complete informations from parent with Cups-specific stuff
|
||||
|
||||
if(!$result = parent::getPrinterAttributes())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if(!isset($this->printer_attributes))
|
||||
{
|
||||
return FALSE;
|
||||
|
||||
if (isset ($this->printer_attributes->printer_type)) {
|
||||
}
|
||||
|
||||
if (isset ($this->printer_attributes->printer_type))
|
||||
{
|
||||
$printer_type = $this->printer_attributes->printer_type->_value0;
|
||||
$table = self::_interpretPrinterType($printer_type);
|
||||
|
||||
for($i = 0 ; $i < count($table) ; $i++ ) {
|
||||
|
||||
for($i = 0 ; $i < count($table) ; $i++ )
|
||||
{
|
||||
$index = '_value'.$i;
|
||||
$this->printer_attributes->printer_type->$index = $table[$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
return $result;
|
||||
}
|
||||
// }}}
|
||||
|
||||
//
|
||||
// SETUP
|
||||
//
|
||||
|
||||
// {{{ _initTags ()
|
||||
protected function _initTags () {
|
||||
|
||||
protected function _initTags ()
|
||||
{
|
||||
// override parent with specific cups attributes
|
||||
|
||||
$operation_tags = array ();
|
||||
|
||||
$operation_tags = array ();
|
||||
$this->operation_tags = array_merge ($this->operation_tags, $operation_tags);
|
||||
|
||||
|
||||
$job_tags = array ( "job-billing" => array("tag" => "textWithoutLanguage"),
|
||||
"blackplot" => array("tag" => "boolean"),
|
||||
"brightness" => array("tag" => "integer"),
|
||||
@@ -430,25 +498,23 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
"saturation" => array("tag" => "integer"),
|
||||
"scaling" => array("tag" => "integer"),
|
||||
"wrap" => array("tag","boolean"),
|
||||
|
||||
|
||||
);
|
||||
$this->job_tags = array_merge ($this->job_tags, $job_tags);
|
||||
}
|
||||
// }}}
|
||||
|
||||
//
|
||||
// REQUEST BUILDING
|
||||
//
|
||||
|
||||
// {{{ _enumBuild ($tag,$value)
|
||||
protected function _enumBuild ($tag,$value) {
|
||||
|
||||
//
|
||||
// REQUEST BUILDING
|
||||
//
|
||||
protected function _enumBuild ($tag,$value)
|
||||
{
|
||||
$value_built = parent::_enumBuild($tag,$value);
|
||||
|
||||
|
||||
switch ($tag) {
|
||||
case "cpi":
|
||||
switch ($value) {
|
||||
switch ($tag)
|
||||
{
|
||||
case "cpi":
|
||||
switch ($value)
|
||||
{
|
||||
case '10':
|
||||
$value_built = chr(10);
|
||||
break;
|
||||
@@ -463,7 +529,8 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
}
|
||||
break;
|
||||
case "lpi":
|
||||
switch ($value) {
|
||||
switch ($value)
|
||||
{
|
||||
case '6':
|
||||
$value_built = chr(6);
|
||||
break;
|
||||
@@ -479,60 +546,66 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
$prepend = '';
|
||||
while ((strlen($value_built) + strlen($prepend)) < 4)
|
||||
$prepend .= chr(0);
|
||||
return $prepend.$value_built;
|
||||
return $prepend.$value_built;
|
||||
}
|
||||
// }}}
|
||||
|
||||
//
|
||||
// RESPONSE PARSING
|
||||
//
|
||||
|
||||
// {{{ _getAvailablePrinters ()
|
||||
private function _getAvailablePrinters () {
|
||||
|
||||
//
|
||||
// RESPONSE PARSING
|
||||
//
|
||||
private function _getAvailablePrinters ()
|
||||
{
|
||||
$this->available_printers = array();
|
||||
$this->printer_map = array();
|
||||
$k = 0;
|
||||
$this->printers_attributes = new stdClass();
|
||||
$this->printers_attributes = new \stdClass();
|
||||
|
||||
for ($i = 0 ; (array_key_exists($i,$this->serveroutput->response)) ; $i ++)
|
||||
if (($this->serveroutput->response[$i]['attributes']) == "printer-attributes") {
|
||||
{
|
||||
if (($this->serveroutput->response[$i]['attributes']) == "printer-attributes")
|
||||
{
|
||||
$phpname = "_printer".$k;
|
||||
$this->printers_attributes->$phpname = new stdClass();
|
||||
for ($j = 0 ; array_key_exists($j,$this->serveroutput->response[$i]) ; $j++) {
|
||||
|
||||
$this->printers_attributes->$phpname = new \stdClass();
|
||||
for ($j = 0 ; array_key_exists($j,$this->serveroutput->response[$i]) ; $j++)
|
||||
{
|
||||
|
||||
$value = $this->serveroutput->response[$i][$j]['value'];
|
||||
$name = str_replace("-","_",$this->serveroutput->response[$i][$j]['name']);
|
||||
|
||||
switch ($name) {
|
||||
|
||||
switch ($name)
|
||||
{
|
||||
case "printer_uri_supported":
|
||||
$this->available_printers = array_merge($this->available_printers,array($value));
|
||||
break;
|
||||
case "printer_type":
|
||||
$table = self::_interpretPrinterType($value);
|
||||
$this->printers_attributes->$phpname->$name = new stdClass();
|
||||
|
||||
for($l = 0 ; $l < count($table) ; $l++ ) {
|
||||
$this->printers_attributes->$phpname->$name = new \stdClass();
|
||||
|
||||
for($l = 0 ; $l < count($table) ; $l++ )
|
||||
{
|
||||
$index = '_value'.$l;
|
||||
$this->printers_attributes->$phpname->$name->$index = $table[$l];
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case '':
|
||||
break;
|
||||
case 'printer_name':
|
||||
$this->printer_map[$value] = $k;
|
||||
break;
|
||||
default:
|
||||
$this->printers_attributes->$phpname->$name = $value;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
$k ++;
|
||||
}
|
||||
}
|
||||
$k ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
|
||||
// {{{ _getEnumVendorExtensions
|
||||
protected function _getEnumVendorExtensions ($value_parsed) {
|
||||
switch ($value_parsed) {
|
||||
|
||||
protected function _getEnumVendorExtensions ($value_parsed)
|
||||
{
|
||||
switch ($value_parsed)
|
||||
{
|
||||
case 0x4002:
|
||||
$value = 'Get-Availables-Printers';
|
||||
break;
|
||||
@@ -541,110 +614,152 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
break;
|
||||
}
|
||||
|
||||
if (isset($value))
|
||||
return ($value);
|
||||
|
||||
return sprintf('Unknown: 0x%x',$value_parsed);
|
||||
}
|
||||
// }}}
|
||||
if (isset($value))
|
||||
{
|
||||
return ($value);
|
||||
}
|
||||
|
||||
// {{{ _interpretPrinterType($type)
|
||||
private function _interpretPrinterType($value) {
|
||||
return sprintf('Unknown: 0x%x',$value_parsed);
|
||||
}
|
||||
|
||||
|
||||
private function _interpretPrinterType($value)
|
||||
{
|
||||
$value_parsed = 0;
|
||||
for ($i = strlen($value) ; $i > 0 ; $i --)
|
||||
{
|
||||
$value_parsed += pow(256,($i - 1)) * ord($value[strlen($value) - $i]);
|
||||
|
||||
}
|
||||
|
||||
$type[0] = $type[1] = $type[2] = $type[3] = $type[4] = $type[5] = '';
|
||||
$type[6] = $type[7] = $type[8] = $type[9] = $type[10] = '';
|
||||
$type[11] = $type[12] = $type[13] = $type[14] = $type[15] = '';
|
||||
$type[16] = $type[17] = $type[18] = $type[19] = '';
|
||||
|
||||
if ($value_parsed %2 == 1) {
|
||||
|
||||
if ($value_parsed %2 == 1)
|
||||
{
|
||||
$type[0] = 'printer-class';
|
||||
$value_parsed -= 1;
|
||||
}
|
||||
if ($value_parsed %4 == 2 ) {
|
||||
}
|
||||
|
||||
if ($value_parsed %4 == 2 )
|
||||
{
|
||||
$type[1] = 'remote-destination';
|
||||
$value_parsed -= 2;
|
||||
}
|
||||
if ($value_parsed %8 == 4 ) {
|
||||
}
|
||||
|
||||
if ($value_parsed %8 == 4 )
|
||||
{
|
||||
$type[2] = 'print-black';
|
||||
$value_parsed -= 4;
|
||||
}
|
||||
if ($value_parsed %16 == 8 ) {
|
||||
}
|
||||
|
||||
if ($value_parsed %16 == 8 )
|
||||
{
|
||||
$type[3] = 'print-color';
|
||||
$value_parsed -= 8;
|
||||
}
|
||||
if ($value_parsed %32 == 16) {
|
||||
}
|
||||
|
||||
if ($value_parsed %32 == 16)
|
||||
{
|
||||
$type[4] = 'hardware-print-on-both-sides';
|
||||
$value_parsed -= 16;
|
||||
}
|
||||
if ($value_parsed %64 == 32) {
|
||||
}
|
||||
|
||||
if ($value_parsed %64 == 32)
|
||||
{
|
||||
$type[5] = 'hardware-staple-output';
|
||||
$value_parsed -= 32;
|
||||
}
|
||||
if ($value_parsed %128 == 64) {
|
||||
}
|
||||
|
||||
if ($value_parsed %128 == 64)
|
||||
{
|
||||
$type[6] = 'hardware-fast-copies';
|
||||
$value_parsed -= 64;
|
||||
}
|
||||
if ($value_parsed %256 == 128) {
|
||||
}
|
||||
|
||||
if ($value_parsed %256 == 128)
|
||||
{
|
||||
$type[7] = 'hardware-fast-copy-collation';
|
||||
$value_parsed -= 128;
|
||||
}
|
||||
if ($value_parsed %512 == 256) {
|
||||
}
|
||||
|
||||
if ($value_parsed %512 == 256)
|
||||
{
|
||||
$type[8] = 'punch-output';
|
||||
$value_parsed -= 256;
|
||||
}
|
||||
if ($value_parsed %1024 == 512) {
|
||||
}
|
||||
|
||||
if ($value_parsed %1024 == 512)
|
||||
{
|
||||
$type[9] = 'cover-output';
|
||||
$value_parsed -= 512;
|
||||
}
|
||||
if ($value_parsed %2048 == 1024) {
|
||||
}
|
||||
|
||||
if ($value_parsed %2048 == 1024)
|
||||
{
|
||||
$type[10] = 'bind-output';
|
||||
$value_parsed -= 1024;
|
||||
}
|
||||
if ($value_parsed %4096 == 2048) {
|
||||
}
|
||||
|
||||
if ($value_parsed %4096 == 2048)
|
||||
{
|
||||
$type[11] = 'sort-output';
|
||||
$value_parsed -= 2048;
|
||||
}
|
||||
if ($value_parsed %8192 == 4096) {
|
||||
}
|
||||
|
||||
if ($value_parsed %8192 == 4096)
|
||||
{
|
||||
$type[12] = 'handle-media-up-to-US-Legal-A4';
|
||||
$value_parsed -= 4096;
|
||||
}
|
||||
if ($value_parsed %16384 == 8192) {
|
||||
}
|
||||
|
||||
if ($value_parsed %16384 == 8192)
|
||||
{
|
||||
$type[13] = 'handle-media-between-US-Legal-A4-and-ISO_C-A2';
|
||||
$value_parsed -= 8192;
|
||||
}
|
||||
if ($value_parsed %32768 == 16384) {
|
||||
}
|
||||
|
||||
if ($value_parsed %32768 == 16384)
|
||||
{
|
||||
$type[14] = 'handle-media-larger-than-ISO_C-A2';
|
||||
$value_parsed -= 16384;
|
||||
}
|
||||
if ($value_parsed %65536 == 32768) {
|
||||
}
|
||||
|
||||
if ($value_parsed %65536 == 32768)
|
||||
{
|
||||
$type[15] = 'handle-user-defined-media-sizes';
|
||||
$value_parsed -= 32768;
|
||||
}
|
||||
if ($value_parsed %131072 == 65536) {
|
||||
}
|
||||
|
||||
if ($value_parsed %131072 == 65536)
|
||||
{
|
||||
$type[16] = 'implicit-server-generated-class';
|
||||
$value_parsed -= 65536;
|
||||
}
|
||||
if ($value_parsed %262144 == 131072) {
|
||||
}
|
||||
|
||||
if ($value_parsed %262144 == 131072)
|
||||
{
|
||||
$type[17] = 'network-default-printer';
|
||||
$value_parsed -= 131072;
|
||||
}
|
||||
if ($value_parsed %524288 == 262144) {
|
||||
}
|
||||
|
||||
if ($value_parsed %524288 == 262144)
|
||||
{
|
||||
$type[18] = 'fax-device';
|
||||
$value_parsed -= 262144;
|
||||
}
|
||||
return $type;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
|
||||
// {{{ _interpretEnum()
|
||||
protected function _interpretEnum($attribute_name,$value) {
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
||||
|
||||
protected function _interpretEnum($attribute_name,$value)
|
||||
{
|
||||
$value_parsed = self::_interpretInteger($value);
|
||||
|
||||
switch ($attribute_name) {
|
||||
|
||||
switch ($attribute_name)
|
||||
{
|
||||
case 'cpi':
|
||||
case 'lpi':
|
||||
$value = $value_parsed;
|
||||
@@ -652,20 +767,8 @@ class CupsPrintIPP extends ExtendedPrintIPP {
|
||||
default:
|
||||
$value = parent::_interpretEnum($attribute_name,$value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return $value;
|
||||
}
|
||||
// }}}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: php
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
*/
|
||||
?>
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -40,13 +40,13 @@ insert into llx_const (name, value, type, note, visible, entity) values ('SYSLOG
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('SYSLOG_FILE','DOL_DATA_ROOT/dolibarr.log','chaine','Directory where to write log file',0,0);
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('SYSLOG_LEVEL','7','chaine','Level of debug info to show',0,0);
|
||||
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MAIL_SMTP_SERVER','','chaine','Host or ip address for SMTP server',0,0);
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MAIL_SMTP_PORT','','chaine','Port for SMTP server',0,0);
|
||||
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_UPLOAD_DOC','2048','chaine','Max size for file upload (0 means no upload allowed)',0,0);
|
||||
|
||||
-- Hidden but specific to one entity
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MONNAIE','EUR','chaine','Monnaie',0,1);
|
||||
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MAIL_SMTP_SERVER','','chaine','Host or ip address for SMTP server',0,1);
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MAIL_SMTP_PORT','','chaine','Port for SMTP server',0,1);
|
||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_MAIL_EMAIL_FROM','robot@domain.com','chaine','EMail emetteur pour les emails automatiques Dolibarr',0,1);
|
||||
|
||||
--
|
||||
|
||||
@@ -26,14 +26,47 @@ create table llx_c_price_expression
|
||||
expression varchar(80) NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
--create table for user conf of printing driver
|
||||
CREATE TABLE llx_printing
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
tms timestamp,
|
||||
datec datetime,
|
||||
printer_name text NOT NULL,
|
||||
printer_location text NOT NULL,
|
||||
printer_id varchar(255) NOT NULL,
|
||||
copy integer NOT NULL DEFAULT '1',
|
||||
module varchar(16) NOT NULL,
|
||||
driver varchar(16) NOT NULL,
|
||||
userid integer
|
||||
)ENGINE=innodb;
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD fk_price_expression integer DEFAULT NULL;
|
||||
|
||||
-- Taiwan VAT Rates
|
||||
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 2131, 213, '5', '0', 'VAT 5%', 1);
|
||||
|
||||
-- Add situation invoices
|
||||
ALTER TABLE llx_facture ADD situation_cycle_ref integer;
|
||||
ALTER TABLE llx_facture ADD situation_counter integer;
|
||||
ALTER TABLE llx_facture ADD situation_final integer;
|
||||
ALTER TABLE llx_facturedet ADD situation_percent real;
|
||||
ALTER TABLE llx_facturedet ADD fk_prev_id integer;
|
||||
ALTER TABLE llx_facture ADD COLUMN situation_cycle_ref smallint;
|
||||
ALTER TABLE llx_facture ADD COLUMN situation_counter smallint;
|
||||
ALTER TABLE llx_facture ADD COLUMN situation_final smallint;
|
||||
ALTER TABLE llx_facturedet ADD COLUMN situation_percent real;
|
||||
ALTER TABLE llx_facturedet ADD COLUMN fk_prev_id integer;
|
||||
|
||||
-- Convert SMTP config to main entity, so new entities don't get the old values
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_SENDMODE";
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_SMTP_PORT";
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_SMTP_SERVER";
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_SMTPS_ID";
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_SMTPS_PW";
|
||||
UPDATE llx_const SET entity = 1 WHERE entity = 0 AND name = "MAIN_MAIL_EMAIL_TLS";
|
||||
|
||||
|
||||
create table llx_bank_account_extrafields
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
tms timestamp,
|
||||
fk_object integer NOT NULL,
|
||||
import_key varchar(14) -- import key
|
||||
) ENGINE=innodb;
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ create table llx_contrat
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
ref varchar(30), -- contrat reference
|
||||
ref_supplier varchar(30), -- suplier contract ref
|
||||
ref_ext varchar(30), -- external contract ref
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
tms timestamp,
|
||||
datec datetime, -- creation date
|
||||
|
||||
@@ -78,8 +78,8 @@ create table llx_facture
|
||||
import_key varchar(14),
|
||||
extraparams varchar(255), -- for stock other parameters with json format
|
||||
|
||||
situation_cycle_ref smallint UNSIGNED, -- situation cycle reference
|
||||
situation_counter tinyint UNSIGNED, -- situation counter
|
||||
situation_final boolean -- is the situation final ?
|
||||
situation_cycle_ref smallint, -- situation cycle reference
|
||||
situation_counter smallint, -- situation counter
|
||||
situation_final smallint -- is the situation final ?
|
||||
|
||||
)ENGINE=innodb;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
-- ============================================================================
|
||||
-- Copyright (C) 2013 Florian HENRY <florian.henry@open-concept.pro>
|
||||
-- Copyright (C) 2013 Florian HENRY <florian.henry@open-concept.pro>
|
||||
-- Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
@@ -16,15 +17,16 @@
|
||||
--
|
||||
-- ============================================================================
|
||||
|
||||
CREATE TABLE llx_printer_ipp
|
||||
CREATE TABLE llx_printing
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
tms timestamp,
|
||||
datec datetime,
|
||||
tms timestamp,
|
||||
datec datetime,
|
||||
printer_name text NOT NULL,
|
||||
printer_location text NOT NULL,
|
||||
printer_uri varchar(255) NOT NULL,
|
||||
printer_id varchar(255) NOT NULL,
|
||||
copy integer NOT NULL DEFAULT '1',
|
||||
module varchar(16) NOT NULL,
|
||||
login varchar(32) NOT NULL
|
||||
driver varchar(16) NOT NULL,
|
||||
userid integer
|
||||
)ENGINE=innodb;
|
||||
@@ -1040,7 +1040,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).
|
||||
PathToDocuments=Path to documents
|
||||
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
|
||||
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>
|
||||
@@ -1417,7 +1417,7 @@ AdvancedEditor=Advanced editor
|
||||
ActivateFCKeditor=Activate advanced editor for:
|
||||
FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
|
||||
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)
|
||||
FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
|
||||
FCKeditorForMail=WYSIWIG creation/edition for all mail (except Outils->eMailing)
|
||||
|
||||
@@ -260,6 +260,7 @@ days=days
|
||||
Hours=Hours
|
||||
Minutes=Minutes
|
||||
Seconds=Seconds
|
||||
Weeks=Weeks
|
||||
Today=Today
|
||||
Yesterday=Yesterday
|
||||
Tomorrow=Tomorrow
|
||||
@@ -685,6 +686,7 @@ XMoreLines=%s line(s) hidden
|
||||
PublicUrl=Public URL
|
||||
AddBox=Add box
|
||||
SelectElementAndClickRefresh=Select an element and click Refresh
|
||||
PrintFile=Print File %s
|
||||
# Week day
|
||||
Monday=Monday
|
||||
Tuesday=Tuesday
|
||||
|
||||
25
htdocs/langs/en_US/printgcp.lang
Normal file
25
htdocs/langs/en_US/printgcp.lang
Normal file
@@ -0,0 +1,25 @@
|
||||
# Dolibarr language file - Source file is en_US - printgccp
|
||||
PRINTGCP=Google Cloud Print
|
||||
PrintGCPDesc=This driver allow to send documents directly to a printer with Google Cloud Print.
|
||||
PrintingDriverDescprintgcp=Configuration variables for printing driver Google Cloud Print.
|
||||
PrintTestDescprintgcp=List of Printers for Google Cloud Print.
|
||||
PRINTGCP_LOGIN=Google Account Login
|
||||
PRINTGCP_PASSWORD=Google Account Password
|
||||
STATE_ONLINE=Online
|
||||
STATE_UNKNOWN=Unknown
|
||||
STATE_OFFLINE=Offline
|
||||
STATE_DORMANT=Offline for quite a while
|
||||
TYPE_GOOGLE=Google
|
||||
TYPE_HP=HP Printer
|
||||
TYPE_DOCS=DOCS
|
||||
TYPE_DRIVE=Google Drive
|
||||
TYPE_FEDEX=Fedex
|
||||
TYPE_ANDROID_CHROME_SNAPSHOT=Android
|
||||
TYPE_IOS_CHROME_SNAPSHOT=IOS
|
||||
GCP_Name=Name
|
||||
GCP_displayName=Display Name
|
||||
GCP_Id=Printer Id
|
||||
GCP_OwnerName=Owner Name
|
||||
GCP_State=Printer State
|
||||
GCP_connectionStatus=Online State
|
||||
GCP_Type=Printer Type
|
||||
10
htdocs/langs/en_US/printing.lang
Normal file
10
htdocs/langs/en_US/printing.lang
Normal file
@@ -0,0 +1,10 @@
|
||||
# Dolibarr language file - Source file is en_US - printing
|
||||
PrintingSetup=Setup of Printing System
|
||||
PrintingDesc=This module adds a Print button to send documents directly to a printer with various module.
|
||||
ModuleDriverSetup=Setup Module Driver
|
||||
PrintingDriverDesc=Configuration variables for printing driver.
|
||||
ListDrivers=List of drivers
|
||||
PrintTestDesc=List of Printers.
|
||||
FileWasSentToPrinter=File %s was sent to printer
|
||||
NoActivePrintingModuleFound=No active module to print document
|
||||
PleaseSelectaDriverfromList=Please select a driver from list.
|
||||
@@ -1,6 +1,9 @@
|
||||
# Dolibarr language file - Source file is en_US - printipp
|
||||
PRINTIPP=PrintIPP Driver
|
||||
PrintIPPSetup=Setup of Direct Print module
|
||||
PrintIPPDesc=This module adds a Print button to send documents directly to a printer. It requires a Linux system with CUPS installed.
|
||||
PrintIPPDesc=This driver allow to send documents directly to a printer. It requires a Linux system with CUPS installed.
|
||||
PrintingDriverDescprintipp=Configuration variables for printing driver PrintIPP.
|
||||
PrintTestDescprintipp=List of Printers for driver PrintIPP.
|
||||
PRINTIPP_ENABLED=Show "Direct print" icon in document lists
|
||||
PRINTIPP_HOST=Print server
|
||||
PRINTIPP_PORT=Port
|
||||
@@ -12,3 +15,23 @@ NoDefaultPrinterDefined=No default printer defined
|
||||
DefaultPrinter=Default printer
|
||||
Printer=Printer
|
||||
CupsServer=CUPS Server
|
||||
IPP_Uri=Printer Uri
|
||||
IPP_Name=Printer Name
|
||||
IPP_State=Printer State
|
||||
IPP_State_reason=State reason
|
||||
IPP_State_reason1=State reason1
|
||||
IPP_BW=BW
|
||||
IPP_Color=Color
|
||||
IPP_Device=Device
|
||||
IPP_Media=Printer media
|
||||
IPP_Supported=Type of media
|
||||
STATE_IPP_idle=Idle
|
||||
STATE_IPP_stopped=Stopped
|
||||
STATE_IPP_paused=Paused
|
||||
STATE_IPP_toner-low-report=Low Toner
|
||||
STATE_IPP_none=None
|
||||
MEDIA_IPP_stationery=Stationery
|
||||
MEDIA_IPP_thermal=Thermal
|
||||
IPP_COLOR_print-black=BW Printer
|
||||
IPP_COLOR_print-color=Color Printer
|
||||
IPP_COLOR_=No
|
||||
|
||||
@@ -736,7 +736,7 @@ if ((! empty($conf->browser->layout) && $conf->browser->layout == 'phone')
|
||||
// If we force to use jmobile, then we reenable javascript
|
||||
if (! empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax=1;
|
||||
// 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->css = "/theme/".$conf->theme."/style.css.php";
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
/* 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
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -21,5 +22,15 @@
|
||||
* \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));
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
/* 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
|
||||
* 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()
|
||||
{
|
||||
global $langs, $conf;
|
||||
global $langs, $conf, $user;
|
||||
$langs->load("marges@marges");
|
||||
|
||||
$h = 0;
|
||||
$head = array();
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/margin/productMargins.php";
|
||||
$head[$h][1] = $langs->trans("ProductMargins");
|
||||
$head[$h][2] = 'productMargins';
|
||||
$h++;
|
||||
if ($user->rights->produit->lire) {
|
||||
$head[$h][0] = DOL_URL_ROOT."/margin/productMargins.php";
|
||||
$head[$h][1] = $langs->trans("ProductMargins");
|
||||
$head[$h][2] = 'productMargins';
|
||||
$h++;
|
||||
}
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/margin/customerMargins.php";
|
||||
$head[$h][1] = $langs->trans("CustomerMargins");
|
||||
$head[$h][2] = 'customerMargins';
|
||||
$h++;
|
||||
if ($user->rights->societe->lire) {
|
||||
$head[$h][0] = DOL_URL_ROOT."/margin/customerMargins.php";
|
||||
$head[$h][1] = $langs->trans("CustomerMargins");
|
||||
$head[$h][2] = 'customerMargins';
|
||||
$h++;
|
||||
}
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/margin/agentMargins.php";
|
||||
$head[$h][1] = $langs->trans("SalesRepresentativeMargins");
|
||||
|
||||
0
htdocs/printing/admin/index.html
Normal file
0
htdocs/printing/admin/index.html
Normal file
277
htdocs/printing/admin/printing.php
Normal file
277
htdocs/printing/admin/printing.php
Normal file
@@ -0,0 +1,277 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/printing/admin/printing.php
|
||||
* \ingroup printing
|
||||
* \brief Page to setup printing module
|
||||
*/
|
||||
|
||||
require '../../main.inc.php';
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/printing/lib/printing.lib.php';
|
||||
|
||||
$langs->load("admin");
|
||||
$langs->load("printing");
|
||||
|
||||
if (! $user->admin) accessforbidden();
|
||||
|
||||
$action = GETPOST('action','alpha');
|
||||
$mode = GETPOST('mode','alpha');
|
||||
$value = GETPOST('value','alpha');
|
||||
$varname = GETPOST('varname', 'alpha');
|
||||
$driver = GETPOST('driver', 'alpha');
|
||||
|
||||
if (! empty($driver)) $langs->load($driver);
|
||||
|
||||
if (!$mode) $mode='config';
|
||||
|
||||
/*
|
||||
* Action
|
||||
*/
|
||||
|
||||
if (($mode == 'test' || $mode == 'setup') && empty($driver))
|
||||
{
|
||||
setEventMessage($langs->trans('PleaseSelectaDriverfromList'));
|
||||
header("Location: ".$_SERVER['PHP_SELF'].'?mode=config');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($action == 'setconst' && $user->admin)
|
||||
{
|
||||
$error=0;
|
||||
$db->begin();
|
||||
foreach ($_POST['setupdriver'] as $setupconst) {
|
||||
//print '<pre>'.print_r($setupconst, true).'</pre>';
|
||||
$result=dolibarr_set_const($db, $setupconst['varname'],$setupconst['value'],'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
setEventMessage($langs->trans("SetupSaved"));
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->rollback();
|
||||
dol_print_error($db);
|
||||
}
|
||||
$action='';
|
||||
}
|
||||
|
||||
if ($action == 'setvalue' && $user->admin)
|
||||
{
|
||||
$db->begin();
|
||||
|
||||
$result=dolibarr_set_const($db, $varname, $value,'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
setEventMessage($langs->trans("SetupSaved"));
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->rollback();
|
||||
dol_print_error($db);
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
llxHeader('',$langs->trans("PrintingSetup"));
|
||||
|
||||
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
|
||||
print_fiche_titre($langs->trans("PrintingSetup"),$linkback,'setup');
|
||||
|
||||
$head=printingadmin_prepare_head();
|
||||
|
||||
if ($mode == 'setup' && $user->admin)
|
||||
{
|
||||
print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?mode=setup&driver='.$driver.'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="setconst">';
|
||||
|
||||
dol_fiche_head($head, $mode, $langs->trans("ModuleDriverSetup"), 0, 'technic');
|
||||
|
||||
print $langs->trans("PrintingDriverDesc".$driver)."<br><br>\n";
|
||||
|
||||
print '<table class="noborder" width="100%">'."\n";
|
||||
$var=true;
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>'.$langs->trans("Parameters").'</th>';
|
||||
print '<th>'.$langs->trans("Value").'</th>';
|
||||
print "</tr>\n";
|
||||
|
||||
if (! empty($driver)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
|
||||
$classname = 'printing_'.$driver;
|
||||
$langs->load($driver);
|
||||
$printer = new $classname($db);
|
||||
//print '<pre>'.print_r($printer, true).'</pre>';
|
||||
$i=0;
|
||||
foreach ($printer->conf as $key) {
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'>';
|
||||
print '<td'.($key['required']?' class=required':'').'>'.$langs->trans($key['varname']).'</td><td>';
|
||||
print '<input size="32" type="'.(empty($key['type'])?'text':$key['type']).'" name="setupdriver['.$i.'][value]" value="'.$conf->global->{$key['varname']}.'">';
|
||||
print '<input type="hidden" name="setupdriver['.$i.'][varname]" value="'.$key['varname'].'">';
|
||||
print ' '.($key['example']!=''?$langs->trans("Example").' : '.$key['example']:'');
|
||||
print '</tr>';
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
print $langs->trans('PleaseSelectaDriverfromList');
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
if (! empty($driver)) {
|
||||
print '<div class="center"><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Modify")).'"></center>';
|
||||
}
|
||||
print '</form>';
|
||||
dol_fiche_end();
|
||||
|
||||
}
|
||||
if ($mode == 'config' && $user->admin)
|
||||
{
|
||||
dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic');
|
||||
|
||||
print $langs->trans("PrintingDesc")."<br><br>\n";
|
||||
|
||||
print '<table class="noborder" width="100%">'."\n";
|
||||
|
||||
$var=true;
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>'.$langs->trans("Description").'</th>';
|
||||
print '<th class="center">'.$langs->trans("Active").'</th>';
|
||||
print '<th class="center">'.$langs->trans("Setup").'</th>';
|
||||
print '<th class="center">'.$langs->trans("Test").'</th>';
|
||||
print "</tr>\n";
|
||||
|
||||
$object = new PrintingDriver($db);
|
||||
$result = $object->listDrivers($db, 10);
|
||||
foreach ($result as $driver) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
|
||||
$classname = 'printing_'.$driver;
|
||||
$langs->load($driver);
|
||||
$printer = new $classname($db);
|
||||
//print '<pre>'.print_r($printer, true).'</pre>';
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'>';
|
||||
print '<td>'.img_picto('', $printer->picto).$langs->trans($printer->desc).'</td>';
|
||||
print '<td class="center">';
|
||||
if (! empty($conf->use_javascript_ajax))
|
||||
{
|
||||
print ajax_constantonoff($printer->active);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (empty($conf->global->{$printer->conf}))
|
||||
{
|
||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=setvalue&varname='.$printer->active.'&value=1">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=setvalue&varname='.$printer->active.'&value=0">'.img_picto($langs->trans("Enabled"),'on').'</a>';
|
||||
}
|
||||
}
|
||||
print '<td class="center"><a href="'.$_SERVER['PHP_SELF'].'?mode=setup&driver='.$printer->name.'">'.img_picto('', 'setup').'</a></td>';
|
||||
print '<td class="center"><a href="'.$_SERVER['PHP_SELF'].'?mode=test&driver='.$printer->name.'">'.img_picto('', 'setup').'</a></td>';
|
||||
print '</tr>'."\n";
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
dol_fiche_end();
|
||||
}
|
||||
|
||||
if ($mode == 'test' && $user->admin)
|
||||
{
|
||||
dol_fiche_head($head, $mode, $langs->trans("PrintingTest"), 0, 'technic');
|
||||
|
||||
print $langs->trans('PrintTestDesc'.$driver)."<br><br>\n";
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
if (! empty($driver)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
|
||||
$classname = 'printing_'.$driver;
|
||||
$langs->load($driver);
|
||||
$printer = new $classname($db);
|
||||
//print '<pre>'.print_r($printer, true).'</pre>';
|
||||
print $printer->listAvailablePrinters();
|
||||
|
||||
} else {
|
||||
print $langs->trans('PleaseSelectaDriverfromList');
|
||||
}
|
||||
print '</table>';
|
||||
|
||||
dol_fiche_end();
|
||||
}
|
||||
|
||||
if ($mode == 'userconf' && $user->admin)
|
||||
{
|
||||
dol_fiche_head($head, $mode, $langs->trans("UserConf"), 0, 'technic');
|
||||
|
||||
print $langs->trans('PrintUserConfDesc'.$driver)."<br><br>\n";
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
$var=true;
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>'.$langs->trans("User").'</th>';
|
||||
print '<th>'.$langs->trans("PrintModule").'</th>';
|
||||
print '<th>'.$langs->trans("PrintDriver").'</th>';
|
||||
print '<th>'.$langs->trans("Printer").'</th>';
|
||||
print '<th>'.$langs->trans("PrinterLocation").'</th>';
|
||||
print '<th>'.$langs->trans("PrinterId").'</th>';
|
||||
print '<th>'.$langs->trans("NumberOfCopy").'</th>';
|
||||
print '<th class="center">'.$langs->trans("Delete").'</th>';
|
||||
print "</tr>\n";
|
||||
$sql = 'SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login FROM '.MAIN_DB_PREFIX.'printing as p, '.MAIN_DB_PREFIX.'user as u WHERE p.userid=u.rowid';
|
||||
$resql = $db->query($sql);
|
||||
while ($row=$db->fetch_array($resql)) {
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'>';
|
||||
print '<td>'.$row['login'].'</td>';
|
||||
print '<td>'.$row['module'].'</td>';
|
||||
print '<td>'.$row['driver'].'</td>';
|
||||
print '<td>'.$row['printer_name'].'</td>';
|
||||
print '<td>'.$row['printer_location'].'</td>';
|
||||
print '<td>'.$row['printer_id'].'</td>';
|
||||
print '<td>'.$row['copy'].'</td>';
|
||||
print '<td class="center">'.img_picto($langs->trans("Delete"), 'delete').'</td>';
|
||||
print "</tr>\n";
|
||||
}
|
||||
print '</table>';
|
||||
|
||||
dol_fiche_end();
|
||||
|
||||
}
|
||||
|
||||
llxFooter();
|
||||
|
||||
$db->close();
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2014 Frederic France <frederic.france@free.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,20 +17,21 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/printipp/index.php
|
||||
* \ingroup printipp
|
||||
* \brief Printipp
|
||||
* \file htdocs/printing/index.php
|
||||
* \ingroup printing
|
||||
* \brief Printing
|
||||
*/
|
||||
|
||||
require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/dolprintipp.class.php';
|
||||
|
||||
llxHeader("",$langs->trans("Printer"));
|
||||
llxHeader("",$langs->trans("Printing"));
|
||||
|
||||
print_fiche_titre($langs->trans("Printer"));
|
||||
print_fiche_titre($langs->trans("Printing"));
|
||||
|
||||
$printer = new dolPrintIPP($db,$conf->global->PRINTIPP_HOST,$conf->global->PRINTIPP_PORT,$user->login,$conf->global->PRINTIPP_USER,$conf->global->PRINTIPP_PASSWORD);
|
||||
$printer->list_jobs('commande');
|
||||
// List Jobs from printing modules
|
||||
//$printer = new dolPrintIPP($db,$conf->global->PRINTIPP_HOST,$conf->global->PRINTIPP_PORT,$user->login,$conf->global->PRINTIPP_USER,$conf->global->PRINTIPP_PASSWORD);
|
||||
//$printer->list_jobs('commande');
|
||||
|
||||
llxFooter();
|
||||
|
||||
0
htdocs/printing/lib/index.html
Normal file
0
htdocs/printing/lib/index.html
Normal file
@@ -16,44 +16,54 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/printipp/lib/printipp.lib.php
|
||||
* \ingroup printipp
|
||||
* \brief Library for printipp functions
|
||||
* \file htdocs/printing/lib/printing.lib.php
|
||||
* \ingroup printing
|
||||
* \brief Library for printing functions
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Define head array for tabs of printipp tools setup pages
|
||||
* Define head array for tabs of printing tools setup pages
|
||||
*
|
||||
* @return Array of head
|
||||
*/
|
||||
function printippadmin_prepare_head()
|
||||
function printingadmin_prepare_head()
|
||||
{
|
||||
global $langs, $conf;
|
||||
|
||||
$h = 0;
|
||||
$head = array();
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/printipp/admin/printipp.php?mode=config";
|
||||
$head[$h][1] = $langs->trans("CupsServer");
|
||||
$head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=config";
|
||||
$head[$h][1] = $langs->trans("ListDrivers");
|
||||
$head[$h][2] = 'config';
|
||||
$h++;
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/printipp/admin/printipp.php?mode=test";
|
||||
$head[$h][1] = $langs->trans("Printer");
|
||||
$head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=setup";
|
||||
$head[$h][1] = $langs->trans("SetupDriver");
|
||||
$head[$h][2] = 'setup';
|
||||
$h++;
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=test";
|
||||
$head[$h][1] = $langs->trans("TestDriver");
|
||||
$head[$h][2] = 'test';
|
||||
$h++;
|
||||
|
||||
$object=new stdClass();
|
||||
$head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=userconf";
|
||||
$head[$h][1] = $langs->trans("UserConf");
|
||||
$head[$h][2] = 'userconf';
|
||||
$h++;
|
||||
|
||||
//$object=new stdClass();
|
||||
|
||||
// Show more tabs from modules
|
||||
// Entries must be declared in modules descriptor with line
|
||||
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
|
||||
// $this->tabs = array('entity:-tabname); to remove a tab
|
||||
complete_head_from_modules($conf,$langs,$object,$head,$h,'printippadmin');
|
||||
//complete_head_from_modules($conf,$langs,$object,$head,$h,'printingadmin');
|
||||
|
||||
complete_head_from_modules($conf,$langs,$object,$head,$h,'printipp','remove');
|
||||
//complete_head_from_modules($conf,$langs,$object,$head,$h,'printing','remove');
|
||||
|
||||
return $head;
|
||||
}
|
||||
@@ -1,246 +0,0 @@
|
||||
<?php
|
||||
/* Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/printipp/admin/printipp.php
|
||||
* \ingroup printipp
|
||||
* \brief Page to setup printipp module
|
||||
*/
|
||||
|
||||
require '../../main.inc.php';
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/dolprintipp.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/printipp/lib/printipp.lib.php';
|
||||
|
||||
$langs->load("admin");
|
||||
$langs->load("printipp");
|
||||
|
||||
if (! $user->admin) accessforbidden();
|
||||
|
||||
$action = GETPOST('action','alpha');
|
||||
$mode = GETPOST('mode','alpha');
|
||||
$value = GETPOST('value','alpha');
|
||||
|
||||
if (!$mode) $mode='config';
|
||||
|
||||
/*
|
||||
* Action
|
||||
*/
|
||||
|
||||
if ($action == 'setvalue' && $user->admin)
|
||||
{
|
||||
$db->begin();
|
||||
|
||||
if (! $result > 0) $error++;
|
||||
$result=dolibarr_set_const($db, "PRINTIPP_HOST",GETPOST('PRINTIPP_HOST','alpha'),'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
$result=dolibarr_set_const($db, "PRINTIPP_PORT",GETPOST('PRINTIPP_PORT','alpha'),'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
$result=dolibarr_set_const($db, "PRINTIPP_USER",GETPOST('PRINTIPP_USER','alpha'),'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
$result=dolibarr_set_const($db, "PRINTIPP_PASSWORD",GETPOST('PRINTIPP_PASSWORD','alpha'),'chaine',0,'',$conf->entity);
|
||||
if (! $result > 0) $error++;
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
setEventMessage($langs->trans("SetupSaved"));
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->rollback();
|
||||
dol_print_error($db);
|
||||
}
|
||||
}
|
||||
|
||||
// Set default model
|
||||
else if ($action == 'setprinteruri')
|
||||
{
|
||||
if (dolibarr_set_const($db, "PRINTIPP_URI_DEFAULT",$value,'chaine',0,'',$conf->entity))
|
||||
{
|
||||
// La constante qui a ete lue en avant du nouveau set
|
||||
// on passe donc par une variable pour avoir un affichage coherent
|
||||
$conf->global->PRINTIPP_URI_DEFAULT = $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
llxHeader('',$langs->trans("PrintIPPSetup"));
|
||||
|
||||
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
|
||||
print_fiche_titre($langs->trans("PrintIPPSetup"),$linkback,'setup');
|
||||
|
||||
$head=printippadmin_prepare_head();
|
||||
|
||||
|
||||
if ($mode == 'config' && $user->admin)
|
||||
{
|
||||
print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?mode=config">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="setvalue">';
|
||||
|
||||
dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic');
|
||||
|
||||
print $langs->trans("PrintIPPDesc")."<br><br>\n";
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
|
||||
$var=true;
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Parameters").'</td>';
|
||||
print '<td>'.$langs->trans("Value").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
/*
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>';
|
||||
print $langs->trans("PRINTIPP_ENABLED").'</td><td colspan="2" align="left">';
|
||||
|
||||
if (! empty($conf->use_javascript_ajax))
|
||||
{
|
||||
print ajax_constantonoff('PRINTIPP_ENABLED');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (empty($conf->global->PRINTIPP_ENABLED))
|
||||
{
|
||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_PRINTIPP_ENABLED">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_PRINTIPP_ENABLED">'.img_picto($langs->trans("Enabled"),'on').'</a>';
|
||||
}
|
||||
}
|
||||
print '</td></tr>';
|
||||
*/
|
||||
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td class="fieldrequired">';
|
||||
print $langs->trans("PRINTIPP_HOST").'</td><td>';
|
||||
print '<input size="64" type="text" name="PRINTIPP_HOST" value="'.$conf->global->PRINTIPP_HOST.'">';
|
||||
print ' '.$langs->trans("Example").': localhost';
|
||||
print '</td></tr>';
|
||||
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td class="fieldrequired">';
|
||||
print $langs->trans("PRINTIPP_PORT").'</td><td>';
|
||||
print '<input size="32" type="text" name="PRINTIPP_PORT" value="'.$conf->global->PRINTIPP_PORT.'">';
|
||||
print ' '.$langs->trans("Example").': 631';
|
||||
print '</td></tr>';
|
||||
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>';
|
||||
print $langs->trans("PRINTIPP_USER").'</td><td>';
|
||||
print '<input size="32" type="text" name="PRINTIPP_USER" value="'.$conf->global->PRINTIPP_USER.'">';
|
||||
print '</td></tr>';
|
||||
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>';
|
||||
print $langs->trans("PRINTIPP_PASSWORD").'</td><td>';
|
||||
print '<input size="32" type="text" name="PRINTIPP_PASSWORD" value="'.$conf->global->PRINTIPP_PASSWORD.'">';
|
||||
print '</td></tr>';
|
||||
|
||||
//$var=true;
|
||||
//print '<tr class="liste_titre">';
|
||||
//print '<td>'.$langs->trans("OtherParameter").'</td>';
|
||||
//print '<td>'.$langs->trans("Value").'</td>';
|
||||
//print "</tr>\n";
|
||||
|
||||
print '</table>';
|
||||
|
||||
dol_fiche_end();
|
||||
|
||||
print '<div class="center"><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Modify")).'"></center>';
|
||||
|
||||
print '</form>';
|
||||
}
|
||||
|
||||
if ($mode == 'test' && $user->admin)
|
||||
{
|
||||
dol_fiche_head($head, $mode, $langs->trans("ModuleSetup"), 0, 'technic');
|
||||
|
||||
print $langs->trans("PrintIPPDesc")."<br><br>\n";
|
||||
|
||||
print '<table class="nobordernopadding" width="100%">';
|
||||
$printer = new dolPrintIPP($db,$conf->global->PRINTIPP_HOST,$conf->global->PRINTIPP_PORT,$user->login,$conf->global->PRINTIPP_USER,$conf->global->PRINTIPP_PASSWORD);
|
||||
$var=true;
|
||||
print '<table width="100%" class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>Uri</td>';
|
||||
print '<td>Name</td>';
|
||||
print '<td>State</td>';
|
||||
print '<td>State_reason</td>';
|
||||
print '<td>State_reason1</td>';
|
||||
print '<td>BW</td>';
|
||||
print '<td>Color</td>';
|
||||
//print '<td>Device</td>';
|
||||
print '<td>Media</td>';
|
||||
print '<td>Supported</td>';
|
||||
print '<td>'.$langs->trans("Select").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$list = $printer->getlist_available_printers();
|
||||
$var = true;
|
||||
foreach ($list as $value)
|
||||
{
|
||||
$var=!$var;
|
||||
$printer_det = $printer->get_printer_detail($value);
|
||||
print "<tr ".$bc[$var].">";
|
||||
print '<td>'.$value.'</td>';
|
||||
//print '<td><pre>'.print_r($printer_det,true).'</pre></td>';
|
||||
print '<td>'.$printer_det->printer_name->_value0.'</td>';
|
||||
print '<td>'.$printer_det->printer_state->_value0.'</td>';
|
||||
print '<td>'.$printer_det->printer_state_reasons->_value0.'</td>';
|
||||
print '<td>'.$printer_det->printer_state_reasons->_value1.'</td>';
|
||||
print '<td>'.$printer_det->printer_type->_value2.'</td>';
|
||||
print '<td>'.$printer_det->printer_type->_value3.'</td>';
|
||||
//print '<td>'.$printer_det->device_uri->_value0.'</td>';
|
||||
print '<td>'.$printer_det->media_default->_value0.'</td>';
|
||||
print '<td>'.$printer_det->media_type_supported->_value1.'</td>';
|
||||
// Defaut
|
||||
print "<td align=\"center\">";
|
||||
if ($conf->global->PRINTIPP_URI_DEFAULT == "$value")
|
||||
{
|
||||
print img_picto($langs->trans("Default"),'on');
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setprinteruri&mode=test&value='.urlencode($value).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
}
|
||||
print '</td>';
|
||||
print "</tr>\n";
|
||||
}
|
||||
print '</table>';
|
||||
|
||||
if (count($list) == 0) print $langs->trans("NoPrinterFound");
|
||||
|
||||
dol_fiche_end();
|
||||
}
|
||||
|
||||
|
||||
|
||||
llxFooter();
|
||||
|
||||
$db->close();
|
||||
@@ -73,16 +73,20 @@ if ($id > 0 || ! empty($ref))
|
||||
}
|
||||
$modulepart='produit';
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
$parameters=array('id'=>$id);
|
||||
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
|
||||
|
||||
/*
|
||||
* Action envoie fichier
|
||||
*/
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_pre_headers.tpl.php';
|
||||
if (empty($reshook))
|
||||
{
|
||||
// Action sending file
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_pre_headers.tpl.php';
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
* Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2014 Ion Agorria <ion@agorria.com>
|
||||
* Copyright (C) 2014 Ion Agorria <ion@agorria.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -81,151 +81,154 @@ $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
|
||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
|
||||
if ($action == 'remove_pf')
|
||||
if (empty($reshook))
|
||||
{
|
||||
$product = new ProductFournisseur($db);
|
||||
if ($product->fetch($id) > 0)
|
||||
if ($action == 'remove_pf')
|
||||
{
|
||||
if ($rowid)
|
||||
$product = new ProductFournisseur($db);
|
||||
if ($product->fetch($id) > 0)
|
||||
{
|
||||
$result=$product->remove_product_fournisseur_price($rowid);
|
||||
$action = '';
|
||||
setEventMessage($langs->trans("PriceRemoved"));
|
||||
if ($rowid)
|
||||
{
|
||||
$result=$product->remove_product_fournisseur_price($rowid);
|
||||
$action = '';
|
||||
setEventMessage($langs->trans("PriceRemoved"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel"))
|
||||
{
|
||||
$id_fourn=GETPOST("id_fourn");
|
||||
if (empty($id_fourn)) $id_fourn=GETPOST("search_id_fourn");
|
||||
$ref_fourn=GETPOST("ref_fourn");
|
||||
if (empty($ref_fourn)) $ref_fourn=GETPOST("search_ref_fourn");
|
||||
$quantity=GETPOST("qty");
|
||||
$remise_percent=price2num(GETPOST('remise_percent','alpha'));
|
||||
$npr = preg_match('/\*/', $_POST['tva_tx']) ? 1 : 0 ;
|
||||
$tva_tx = str_replace('*','', GETPOST('tva_tx','alpha'));
|
||||
$tva_tx = price2num($tva_tx);
|
||||
$price_expression = GETPOST('eid', 'int') == 0 ? 'NULL' : GETPOST('eid', 'int'); //Discard expression if not in expression mode
|
||||
if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel"))
|
||||
{
|
||||
$id_fourn=GETPOST("id_fourn");
|
||||
if (empty($id_fourn)) $id_fourn=GETPOST("search_id_fourn");
|
||||
$ref_fourn=GETPOST("ref_fourn");
|
||||
if (empty($ref_fourn)) $ref_fourn=GETPOST("search_ref_fourn");
|
||||
$quantity=GETPOST("qty");
|
||||
$remise_percent=price2num(GETPOST('remise_percent','alpha'));
|
||||
$npr = preg_match('/\*/', $_POST['tva_tx']) ? 1 : 0 ;
|
||||
$tva_tx = str_replace('*','', GETPOST('tva_tx','alpha'));
|
||||
$tva_tx = price2num($tva_tx);
|
||||
$price_expression = GETPOST('eid', 'int') == 0 ? 'NULL' : GETPOST('eid', 'int'); //Discard expression if not in expression mode
|
||||
|
||||
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"] == '')
|
||||
{
|
||||
if ($price_expression == 'NULL') { //This is not because of using expression instead of numeric price
|
||||
if ($tva_tx == '')
|
||||
{
|
||||
$error++;
|
||||
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Price")), 'errors');
|
||||
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("VATRateForSupplierProduct")), 'errors');
|
||||
}
|
||||
else
|
||||
if (empty($quantity))
|
||||
{
|
||||
$_POST["price"] = 0;
|
||||
$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"] == '')
|
||||
{
|
||||
if ($price_expression == 'NULL') { //This is not because of using expression instead of numeric price
|
||||
$error++;
|
||||
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Price")), 'errors');
|
||||
}
|
||||
else
|
||||
{
|
||||
$_POST["price"] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$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
|
||||
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');
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($price_expression != 'NULL') {
|
||||
//Check the expression validity by parsing it
|
||||
$priceparser = new PriceParser($db);
|
||||
$price_result = $priceparser->parseProductSupplier($id, $price_expression, $quantity, $tva_tx);
|
||||
if ($price_result < 0) { //Expression is not valid
|
||||
$error++;
|
||||
setEventMessage($priceparser->translatedError(), 'errors');
|
||||
}
|
||||
}
|
||||
if (! $error && ! empty($conf->dynamicprices->enabled)) {
|
||||
$ret=$product->setPriceExpression($price_expression);
|
||||
if ($ret < 0)
|
||||
{
|
||||
$error++;
|
||||
setEventMessage($product->error, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
$action='';
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$product = new ProductFournisseur($db);
|
||||
$result=$product->fetch($id);
|
||||
if ($result <= 0)
|
||||
if (GETPOST('cancel') == $langs->trans("Cancel"))
|
||||
{
|
||||
$error++;
|
||||
setEventMessage($product->error, 'errors');
|
||||
$action = '';
|
||||
header("Location: fournisseurs.php?id=".$_GET["id"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
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
|
||||
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');
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($price_expression != 'NULL') {
|
||||
//Check the expression validity by parsing it
|
||||
$priceparser = new PriceParser($db);
|
||||
$price_result = $priceparser->parseProductSupplier($id, $price_expression, $quantity, $tva_tx);
|
||||
if ($price_result < 0) { //Expression is not valid
|
||||
$error++;
|
||||
setEventMessage($priceparser->translatedError(), 'errors');
|
||||
}
|
||||
}
|
||||
if (! $error && ! empty($conf->dynamicprices->enabled)) {
|
||||
$ret=$product->setPriceExpression($price_expression);
|
||||
if ($ret < 0)
|
||||
{
|
||||
$error++;
|
||||
setEventMessage($product->error, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$db->commit();
|
||||
$action='';
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (GETPOST('cancel') == $langs->trans("Cancel"))
|
||||
{
|
||||
$action = '';
|
||||
header("Location: fournisseurs.php?id=".$_GET["id"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* view
|
||||
@@ -398,7 +401,8 @@ if ($id || $ref)
|
||||
print '<input type="text" class="flat" size="5" name="tva_tx" value="'.(GETPOST("tva_tx")?vatrate(GETPOST("tva_tx")):($default_vat!=''?vatrate($default_vat):'')).'">';
|
||||
print '</td></tr>';
|
||||
|
||||
if (! empty($conf->dynamicprices->enabled)) { //Only show price mode and expression selector if module is enabled
|
||||
if (! empty($conf->dynamicprices->enabled)) //Only show price mode and expression selector if module is enabled
|
||||
{
|
||||
// Price mode selector
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("PriceMode").'</td><td>';
|
||||
$price_expression = new PriceExpression($db);
|
||||
@@ -456,7 +460,7 @@ if ($id || $ref)
|
||||
print '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (is_object($hookmanager))
|
||||
{
|
||||
$parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$product->id);
|
||||
@@ -467,7 +471,7 @@ if ($id || $ref)
|
||||
|
||||
print '<br><div class="center">';
|
||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
||||
print ' ';
|
||||
print ' ';
|
||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||
print '</div>';
|
||||
|
||||
@@ -568,7 +572,7 @@ if ($id || $ref)
|
||||
|
||||
// Charges ????
|
||||
if ($conf->global->PRODUCT_CHARGES)
|
||||
{
|
||||
{
|
||||
if (! empty($conf->margin->enabled))
|
||||
{
|
||||
print '<td align="right">';
|
||||
@@ -576,7 +580,7 @@ if ($id || $ref)
|
||||
print '</td>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Unit price
|
||||
print '<td align="right">';
|
||||
print price($productfourn->fourn_unitprice);
|
||||
@@ -598,7 +602,7 @@ if ($id || $ref)
|
||||
print '</td>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (is_object($hookmanager))
|
||||
{
|
||||
$parameters=array('id_pfp'=>$productfourn->product_fourn_price_id,'id_fourn'=>$id_fourn,'prod_id'=>$product->id);
|
||||
|
||||
@@ -145,12 +145,12 @@ print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'
|
||||
|
||||
// Date start
|
||||
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>';
|
||||
|
||||
// Date end
|
||||
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 '</table>';
|
||||
|
||||
@@ -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
|
||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* ACTIONS
|
||||
*
|
||||
* Put here all code to do according to value of "action" parameter
|
||||
********************************************************************/
|
||||
|
||||
if ($action == 'update' && ! $_POST["cancel"] && $user->rights->resource->write )
|
||||
if (empty($reshook))
|
||||
{
|
||||
$error=0;
|
||||
/*******************************************************************
|
||||
* ACTIONS
|
||||
********************************************************************/
|
||||
|
||||
if (empty($ref))
|
||||
if ($action == 'update' && ! $_POST["cancel"] && $user->rights->resource->write )
|
||||
{
|
||||
$error++;
|
||||
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")).'</div>';
|
||||
}
|
||||
$error=0;
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$res = $object->fetch($id);
|
||||
if ( $res > 0 )
|
||||
if (empty($ref))
|
||||
{
|
||||
$object->ref = $ref;
|
||||
$object->description = $description;
|
||||
$object->fk_code_type_resource = $fk_code_type_resource;
|
||||
$error++;
|
||||
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Ref")), 'errors');
|
||||
}
|
||||
|
||||
$result=$object->update($user);
|
||||
if ($result > 0)
|
||||
if (! $error)
|
||||
{
|
||||
$res = $object->fetch($id);
|
||||
if ( $res > 0 )
|
||||
{
|
||||
Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
|
||||
exit;
|
||||
$object->ref = $ref;
|
||||
$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
|
||||
{
|
||||
setEventMessage('<div class="error">'.$object->error.'</div>');
|
||||
setEventMessage($object->error,'errors');
|
||||
$action='edit';
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
setEventMessage($object->error,'errors');
|
||||
$action='edit';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$action='edit';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************
|
||||
* VIEW
|
||||
*
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
#!/bin/bash
|
||||
# @copyright GPL License 2010 - Vikas Mahajan - http://vikasmahajan.wordpress.com
|
||||
# @copyright GPL License 2013 - Florian HEnry - florian.henry@open-concept.pro
|
||||
|
||||
#
|
||||
# Convert an ODT into a PDF using "jodconverter" tool.
|
||||
# Dolibarr variable MAIN_ODT_AS_PDF must be defined to have this script called after ODT generation.
|
||||
# Dolibarr variable MAIN_DOL_SCRIPTS_ROOT must be defined to path of script directories (otherwise dolibarr will try to guess).
|
||||
|
||||
|
||||
#if [ -f "$1.odt" ]
|
||||
# then
|
||||
# soffice --invisible --convert-to pdf:writer_pdf_Export --outdir $2 "$1.odt"
|
||||
|
||||
@@ -216,7 +216,7 @@ class FactureTest extends PHPUnit_Framework_TestCase
|
||||
$newlocalobject=new Facture($this->savdb);
|
||||
$newlocalobject->initAsSpecimen();
|
||||
$this->changeProperties($newlocalobject);
|
||||
$this->assertEquals($this->objCompare($localobject,$newlocalobject,true,array('newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem','ref','statut','paye','specimen','facnumber','actiontypecode','actionmsg2','actionmsg','mode_reglement','cond_reglement','cond_reglement_doc')), array()); // Actual, Expected
|
||||
$this->assertEquals($this->objCompare($localobject,$newlocalobject,true,array('newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem','ref','statut','paye','specimen','facnumber','actiontypecode','actionmsg2','actionmsg','mode_reglement','cond_reglement','cond_reglement_doc','situation_cycle_ref','situation_counter','situation_final')), array()); // Actual, Expected
|
||||
|
||||
return $localobject;
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
<?php
|
||||
/* Copyright (C) 2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file test/phpunit/PricesTest.php
|
||||
@@ -215,9 +215,9 @@ class PricesTest extends PHPUnit_Framework_TestCase
|
||||
$newlocalobject=new Facture($this->savdb);
|
||||
$newlocalobject->fetch($invoiceid);
|
||||
|
||||
$this->assertEquals(2.48,$newlocalobject->total_ht);
|
||||
$this->assertEquals(0.24,$newlocalobject->total_tva);
|
||||
$this->assertEquals(2.72,$newlocalobject->total_ttc);
|
||||
$this->assertEquals(2.48,$newlocalobject->total_ht, "testUpdatePrice test1");
|
||||
$this->assertEquals(0.24,$newlocalobject->total_tva, "testUpdatePrice test2");
|
||||
$this->assertEquals(2.72,$newlocalobject->total_ttc, "testUpdatePrice test3");
|
||||
|
||||
|
||||
// Two lines of 1.24 give 2.48 HT and 2.73 TTC with global vat rounding mode
|
||||
@@ -231,7 +231,7 @@ class PricesTest extends PHPUnit_Framework_TestCase
|
||||
$newlocalobject=new Facture($this->savdb);
|
||||
$newlocalobject->fetch($invoiceid);
|
||||
|
||||
$this->assertEquals(2.48,$newlocalobject->total_ht);
|
||||
$this->assertEquals(2.48,$newlocalobject->total_ht, "testUpdatePrice test4");
|
||||
//$this->assertEquals(0.25,$newlocalobject->total_tva);
|
||||
//$this->assertEquals(2.73,$newlocalobject->total_ttc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user