Merge branch 'develop' into scrutinizer-patch-2

This commit is contained in:
Laurent Destailleur 2019-11-13 19:14:50 +01:00 committed by GitHub
commit 88d2658625
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 410 additions and 152 deletions

View File

@ -380,7 +380,7 @@ if (! empty($user->rights->produit->lire) || ! empty($user->rights->service->lir
print '<input id="fillfromproduct" type="radio" '.((GETPOST("selectorforbarcode")=='fillfromproduct')?'checked ':'').'name="selectorforbarcode" value="fillfromproduct" class="radiobarcodeselect"> '.$langs->trans("FillBarCodeTypeAndValueFromProduct").' &nbsp; ';
print '<br>';
print '<div class="showforproductselector">';
$form->select_produits(GETPOST('productid'), 'productid', '');
$form->select_produits(GETPOST('productid'), 'productid', '', '', 0, -1, 2, '', 0, array(), 0, '1', 0, 'minwidth400imp', 1);
print ' &nbsp; <input type="submit" id="submitproduct" name="submitproduct" class="button" value="'.(dol_escape_htmltag($langs->trans("GetBarCode"))).'">';
print '</div>';
}

View File

@ -265,6 +265,246 @@ class Categories extends DolibarrApi
);
}
/**
* Link an object to a category by id
*
* @param int $id ID of category
* @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact')
* @param int $object_id ID of object
*
* @return array
* @throws RestException
*
* @url POST {id}/objects/{type}/{object_id}
*/
public function linkObjectById($id, $type, $object_id)
{
if (empty($type) || empty($object_id)) {
throw new RestException(401);
}
if(! DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401);
}
$result = $this->category->fetch($id);
if( ! $result ) {
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
if (!empty($object)) {
$result = $object->fetch($object_id);
if ($result > 0) {
$result=$this->category->add_type($object, $type);
if ($result < 0) {
if ($this->category->error != 'DB_ERROR_RECORD_ALREADY_EXISTS') {
throw new RestException(500, 'Error when linking object', array_merge(array($this->category->error), $this->category->errors));
}
}
} else {
throw new RestException(500, 'Error when fetching object', array_merge(array($object->error), $object->errors));
}
return array(
'success' => array(
'code' => 200,
'message' => 'Objects succefully linked to the category'
)
);
}
throw new RestException(401);
}
/**
* Link an object to a category by ref
*
* @param int $id ID of category
* @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact')
* @param string $object_ref Reference of object
*
* @return array
* @throws RestException
*
* @url POST {id}/objects/{type}/ref/{object_ref}
*/
public function linkObjectByRef($id, $type, $object_ref)
{
if (empty($type) || empty($object_ref)) {
throw new RestException(401);
}
if(! DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401);
}
$result = $this->category->fetch($id);
if( ! $result ) {
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
if (!empty($object)) {
$result = $object->fetch('', $object_ref);
if ($result > 0) {
$result=$this->category->add_type($object, $type);
if ($result < 0) {
if ($this->category->error != 'DB_ERROR_RECORD_ALREADY_EXISTS') {
throw new RestException(500, 'Error when linking object', array_merge(array($this->category->error), $this->category->errors));
}
}
} else {
throw new RestException(500, 'Error when fetching object', array_merge(array($object->error), $object->errors));
}
return array(
'success' => array(
'code' => 200,
'message' => 'Objects succefully linked to the category'
)
);
}
throw new RestException(401);
}
/**
* Unlink an object from a category by id
*
* @param int $id ID of category
* @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact')
* @param int $object_id ID of the object
*
* @return array
* @throws RestException
*
* @url DELETE {id}/objects/{type}/{object_id}
*/
public function unlinkObjectById($id, $type, $object_id)
{
if (empty($type) || empty($object_id)) {
throw new RestException(401);
}
if(! DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401);
}
$result = $this->category->fetch($id);
if( ! $result ) {
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
if (!empty($object)) {
$result = $object->fetch((int) $object_id);
if ($result > 0) {
$result=$this->category->del_type($object, $type);
if ($result < 0) {
throw new RestException(500, 'Error when unlinking object', array_merge(array($this->category->error), $this->category->errors));
}
} else {
throw new RestException(500, 'Error when fetching object', array_merge(array($object->error), $object->errors));
}
return array(
'success' => array(
'code' => 200,
'message' => 'Objects succefully unlinked from the category'
)
);
}
throw new RestException(401);
}
/**
* Unlink an object from a category by ref
*
* @param int $id ID of category
* @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact')
* @param string $object_ref Reference of the object
*
* @return array
* @throws RestException
*
* @url DELETE {id}/objects/{type}/ref/{object_ref}
*/
public function unlinkObjectByRef($id, $type, $object_ref)
{
if (empty($type) || empty($object_ref)) {
throw new RestException(401);
}
if(! DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401);
}
$result = $this->category->fetch($id);
if( ! $result ) {
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
if (!empty($object)) {
$result = $object->fetch('', (string) $object_ref);
if ($result > 0) {
$result=$this->category->del_type($object, $type);
if ($result < 0) {
throw new RestException(500, 'Error when unlinking object', array_merge(array($this->category->error), $this->category->errors));
}
} else {
throw new RestException(500, 'Error when fetching object', array_merge(array($object->error), $object->errors));
}
return array(
'success' => array(
'code' => 200,
'message' => 'Objects succefully unlinked from the category'
)
);
}
throw new RestException(401);
}
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
/**

View File

@ -35,14 +35,14 @@ class ChargeSociales extends CommonObject
/**
* @var string ID to identify managed object
*/
public $element='chargesociales';
public $element = 'chargesociales';
public $table='chargesociales';
public $table = 'chargesociales';
/**
* @var string Name of table without prefix where object is stored
*/
public $table_element='chargesociales';
public $table_element = 'chargesociales';
/**
* @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
@ -175,7 +175,7 @@ class ChargeSociales extends CommonObject
}
else
{
$this->error=$this->db->lasterror();
$this->error = $this->db->lasterror();
return -1;
}
}
@ -187,10 +187,10 @@ class ChargeSociales extends CommonObject
*/
public function check()
{
$newamount=price2num($this->amount, 'MT');
$newamount = price2num($this->amount, 'MT');
// Validation parametres
if (! $newamount > 0 || empty($this->date_ech) || empty($this->periode))
if (!$newamount > 0 || empty($this->date_ech) || empty($this->periode))
{
return false;
}
@ -208,55 +208,55 @@ class ChargeSociales extends CommonObject
public function create($user)
{
global $conf;
$error=0;
$error = 0;
$now=dol_now();
$now = dol_now();
// Nettoyage parametres
$newamount=price2num($this->amount, 'MT');
$newamount = price2num($this->amount, 'MT');
if (!$this->check()) {
$this->error="ErrorBadParameter";
$this->error = "ErrorBadParameter";
return -2;
}
$this->db->begin();
$sql = "INSERT INTO ".MAIN_DB_PREFIX."chargesociales (fk_type, fk_account, fk_mode_reglement, libelle, date_ech, periode, amount, fk_projet, entity, fk_user_author, date_creation)";
$sql.= " VALUES (".$this->type;
$sql.= ", ".($this->fk_account>0 ? $this->fk_account:'NULL');
$sql.= ", ".($this->mode_reglement_id>0 ? $this->mode_reglement_id:"NULL");
$sql.= ", '".$this->db->escape($this->label?$this->label:$this->lib)."'";
$sql.= ", '".$this->db->idate($this->date_ech)."'";
$sql.= ", '".$this->db->idate($this->periode)."'";
$sql.= ", '".price2num($newamount)."'";
$sql.= ", ".($this->fk_project>0?$this->fk_project:'NULL');
$sql.= ", ".$conf->entity;
$sql.= ", ".$user->id;
$sql.= ", '".$this->db->idate($now)."'";
$sql.= ")";
$sql .= " VALUES (".$this->type;
$sql .= ", ".($this->fk_account > 0 ? $this->fk_account : 'NULL');
$sql .= ", ".($this->mode_reglement_id > 0 ? $this->mode_reglement_id : "NULL");
$sql .= ", '".$this->db->escape($this->label ? $this->label : $this->lib)."'";
$sql .= ", '".$this->db->idate($this->date_ech)."'";
$sql .= ", '".$this->db->idate($this->periode)."'";
$sql .= ", '".price2num($newamount)."'";
$sql .= ", ".($this->fk_project > 0 ? $this->fk_project : 'NULL');
$sql .= ", ".$conf->entity;
$sql .= ", ".$user->id;
$sql .= ", '".$this->db->idate($now)."'";
$sql .= ")";
dol_syslog(get_class($this)."::create", LOG_DEBUG);
$resql=$this->db->query($sql);
$resql = $this->db->query($sql);
if ($resql) {
$this->id=$this->db->last_insert_id(MAIN_DB_PREFIX."chargesociales");
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."chargesociales");
//dol_syslog("ChargesSociales::create this->id=".$this->id);
$result=$this->call_trigger('SOCIALCONTRIBUTION_CREATE', $user);
$result = $this->call_trigger('SOCIALCONTRIBUTION_CREATE', $user);
if ($result < 0) $error++;
if(empty($error)) {
if (empty($error)) {
$this->db->commit();
return $this->id;
}
else {
$this->db->rollback();
return -1*$error;
return -1 * $error;
}
}
else
{
$this->error=$this->db->error();
$this->error = $this->db->error();
$this->db->rollback();
return -1;
}
@ -271,23 +271,23 @@ class ChargeSociales extends CommonObject
*/
public function delete($user)
{
$error=0;
$error = 0;
$this->db->begin();
// Get bank transaction lines for this social contributions
include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
$account=new Account($this->db);
$lines_url=$account->get_url('', $this->id, 'sc');
$account = new Account($this->db);
$lines_url = $account->get_url('', $this->id, 'sc');
// Delete bank urls
foreach ($lines_url as $line_url)
{
if (! $error)
if (!$error)
{
$accountline=new AccountLine($this->db);
$accountline = new AccountLine($this->db);
$accountline->fetch($line_url['fk_bank']);
$result=$accountline->delete_urls($user);
$result = $accountline->delete_urls($user);
if ($result < 0)
{
$error++;
@ -296,31 +296,31 @@ class ChargeSociales extends CommonObject
}
// Delete payments
if (! $error)
if (!$error)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."paiementcharge WHERE fk_charge=".$this->id;
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$resql=$this->db->query($sql);
if (! $resql)
$resql = $this->db->query($sql);
if (!$resql)
{
$error++;
$this->error=$this->db->lasterror();
$this->error = $this->db->lasterror();
}
}
if (! $error)
if (!$error)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."chargesociales WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$resql=$this->db->query($sql);
if (! $resql)
$resql = $this->db->query($sql);
if (!$resql)
{
$error++;
$this->error=$this->db->lasterror();
$this->error = $this->db->lasterror();
}
}
if (! $error)
if (!$error)
{
$this->db->commit();
return 1;
@ -342,31 +342,31 @@ class ChargeSociales extends CommonObject
*/
public function update($user, $notrigger = 0)
{
$error=0;
$error = 0;
$this->db->begin();
$sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales";
$sql.= " SET libelle='".$this->db->escape($this->label?$this->label:$this->lib)."'";
$sql.= ", date_ech='".$this->db->idate($this->date_ech)."'";
$sql.= ", periode='".$this->db->idate($this->periode)."'";
$sql.= ", amount='".price2num($this->amount, 'MT')."'";
$sql.= ", fk_projet=".($this->fk_project>0?$this->db->escape($this->fk_project):"NULL");
$sql.= ", fk_user_modif=".$user->id;
$sql.= " WHERE rowid=".$this->id;
$sql .= " SET libelle='".$this->db->escape($this->label ? $this->label : $this->lib)."'";
$sql .= ", date_ech='".$this->db->idate($this->date_ech)."'";
$sql .= ", periode='".$this->db->idate($this->periode)."'";
$sql .= ", amount='".price2num($this->amount, 'MT')."'";
$sql .= ", fk_projet=".($this->fk_project > 0 ? $this->db->escape($this->fk_project) : "NULL");
$sql .= ", fk_user_modif=".$user->id;
$sql .= " WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::update", LOG_DEBUG);
$resql=$this->db->query($sql);
$resql = $this->db->query($sql);
if (! $resql) {
$error++; $this->errors[]="Error ".$this->db->lasterror();
if (!$resql) {
$error++; $this->errors[] = "Error ".$this->db->lasterror();
}
if (! $error)
if (!$error)
{
if (! $notrigger)
if (!$notrigger)
{
// Call trigger
$result=$this->call_trigger('SOCIALCHARGES_MODIFY', $user);
$result = $this->call_trigger('SOCIALCHARGES_MODIFY', $user);
if ($result < 0) $error++;
// End call triggers
}
@ -375,13 +375,13 @@ class ChargeSociales extends CommonObject
// Commit or rollback
if ($error)
{
foreach($this->errors as $errmsg)
foreach ($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
$this->error .= ($this->error ? ', '.$errmsg : $errmsg);
}
$this->db->rollback();
return -1*$error;
return -1 * $error;
}
else
{
@ -401,9 +401,9 @@ class ChargeSociales extends CommonObject
global $conf;
$sql = "SELECT SUM(f.amount) as amount";
$sql.= " FROM ".MAIN_DB_PREFIX."chargesociales as f";
$sql.= " WHERE f.entity = ".$conf->entity;
$sql.= " AND paye = 0";
$sql .= " FROM ".MAIN_DB_PREFIX."chargesociales as f";
$sql .= " WHERE f.entity = ".$conf->entity;
$sql .= " AND paye = 0";
if ($year) {
$sql .= " AND f.datev >= '$y-01-01' AND f.datev <= '$y-12-31' ";
@ -441,8 +441,8 @@ class ChargeSociales extends CommonObject
{
// phpcs:enable
$sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales SET";
$sql.= " paye = 1";
$sql.= " WHERE rowid = ".$this->id;
$sql .= " paye = 1";
$sql .= " WHERE rowid = ".$this->id;
$return = $this->db->query($sql);
if ($return) return 1;
else return -1;
@ -459,8 +459,8 @@ class ChargeSociales extends CommonObject
{
// phpcs:enable
$sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales SET";
$sql.= " paye = 0";
$sql.= " WHERE rowid = ".$this->id;
$sql .= " paye = 0";
$sql .= " WHERE rowid = ".$this->id;
$return = $this->db->query($sql);
if ($return) return 1;
else return -1;
@ -549,9 +549,9 @@ class ChargeSociales extends CommonObject
{
global $langs, $conf, $user, $form;
if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips
if (!empty($conf->dol_no_mouse_hover)) $notooltip = 1; // Force disable tooltips
$result='';
$result = '';
$url = DOL_URL_ROOT.'/compta/sociales/card.php?id='.$this->id;
@ -607,20 +607,20 @@ class ChargeSociales extends CommonObject
*/
public function getSommePaiement()
{
$table='paiementcharge';
$field='fk_charge';
$table = 'paiementcharge';
$field = 'fk_charge';
$sql = 'SELECT sum(amount) as amount';
$sql.= ' FROM '.MAIN_DB_PREFIX.$table;
$sql.= ' WHERE '.$field.' = '.$this->id;
$sql .= ' FROM '.MAIN_DB_PREFIX.$table;
$sql .= ' WHERE '.$field.' = '.$this->id;
dol_syslog(get_class($this)."::getSommePaiement", LOG_DEBUG);
$resql=$this->db->query($sql);
$resql = $this->db->query($sql);
if ($resql) {
$amount=0;
$amount = 0;
$obj = $this->db->fetch_object($resql);
if ($obj) $amount=$obj->amount?$obj->amount:0;
if ($obj) $amount = $obj->amount ? $obj->amount : 0;
$this->db->free($resql);
return $amount;
@ -640,12 +640,12 @@ class ChargeSociales extends CommonObject
public function info($id)
{
$sql = "SELECT e.rowid, e.tms as datem, e.date_creation as datec, e.date_valid as datev, e.import_key,";
$sql.= " e.fk_user_author, e.fk_user_modif, e.fk_user_valid";
$sql.= " FROM ".MAIN_DB_PREFIX."chargesociales as e";
$sql.= " WHERE e.rowid = ".$id;
$sql .= " e.fk_user_author, e.fk_user_modif, e.fk_user_valid";
$sql .= " FROM ".MAIN_DB_PREFIX."chargesociales as e";
$sql .= " WHERE e.rowid = ".$id;
dol_syslog(get_class($this)."::info", LOG_DEBUG);
$result=$this->db->query($sql);
$result = $this->db->query($sql);
if ($result)
{
if ($this->db->num_rows($result))
@ -696,14 +696,14 @@ class ChargeSociales extends CommonObject
public function initAsSpecimen()
{
// Initialize parameters
$this->id=0;
$this->id = 0;
$this->ref = 'SPECIMEN';
$this->specimen=1;
$this->specimen = 1;
$this->paye = 0;
$this->date = dol_now();
$this->date_ech=$this->date+3600*24*30;
$this->periode=$this->date+3600*24*30;
$this->amount=100;
$this->date_ech = $this->date + 3600 * 24 * 30;
$this->periode = $this->date + 3600 * 24 * 30;
$this->amount = 100;
$this->label = 'Social contribution label';
$this->type = 1;
$this->type_label = 'Type of social contribution';

View File

@ -1,6 +1,7 @@
<?php
/* Copyright (C) 2013-2018 Jean-François FERRY <hello@librethic.io>
* Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.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
@ -180,10 +181,10 @@ function showDirectPublicLink($object)
}
/**
* Generate a random id
* Generate a random id
*
* @param string $car Char to generate key
* @return void
* @param int $car Length of string to generate key
* @return string
*/
function generate_random_id($car = 16)
{

View File

@ -25,7 +25,7 @@
* \ingroup bom
* \brief Description and activation file for module Bom
*/
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
/**
@ -75,7 +75,7 @@ class modBom extends DolibarrModules
// Name of image file used for this module.
// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
$this->picto='bom';
$this->picto = 'bom';
// Define some features supported by module (triggers, login, substitutions, menus, css, etc...)
$this->module_parts = array(
@ -103,15 +103,15 @@ class modBom extends DolibarrModules
$this->config_page_url = array("bom.php");
// Dependencies
$this->hidden = false; // A condition to hide module
$this->depends = array('modProduct'); // List of module class names as string that must be enabled if this module is enabled. Example: array('always1'=>'modModuleToEnable1','always2'=>'modModuleToEnable2', 'FR1'=>'modModuleToEnableFR'...)
$this->requiredby = array('modMrp'); // List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...)
$this->conflictwith = array(); // List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...)
$this->hidden = false; // A condition to hide module
$this->depends = array('modProduct'); // List of module class names as string that must be enabled if this module is enabled. Example: array('always1'=>'modModuleToEnable1','always2'=>'modModuleToEnable2', 'FR1'=>'modModuleToEnableFR'...)
$this->requiredby = array('modMrp'); // List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...)
$this->conflictwith = array(); // List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...)
$this->langfiles = array("mrp");
//$this->phpmin = array(5,4); // Minimum version of PHP required by module
$this->need_dolibarr_version = array(9,0); // Minimum version of Dolibarr required by module
$this->warnings_activation = array(); // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
$this->warnings_activation_ext = array(); // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
$this->need_dolibarr_version = array(9, 0); // Minimum version of Dolibarr required by module
$this->warnings_activation = array(); // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
$this->warnings_activation_ext = array(); // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
//$this->automatic_activation = array('FR'=>'BomWasAutomaticallyActivatedBecauseOfYourCountryChoice');
//$this->always_enabled = true; // If true, can't be disabled
@ -132,10 +132,10 @@ class modBom extends DolibarrModules
'fr_FR:ParentCompany'=>'Maison mère ou revendeur'
)*/
if (! isset($conf->bom) || ! isset($conf->bom->enabled))
if (!isset($conf->bom) || !isset($conf->bom->enabled))
{
$conf->bom=new stdClass();
$conf->bom->enabled=0;
$conf->bom = new stdClass();
$conf->bom->enabled = 0;
}
@ -281,28 +281,28 @@ class modBom extends DolibarrModules
// Exports
$r=1;
$r = 1;
/* BEGIN MODULEBUILDER EXPORT BILLOFMATERIALS */
$langs->load("mrp");
$this->export_code[$r]=$this->rights_class.'_'.$r;
$this->export_label[$r]='BomAndBomLines'; // Translation key (used only if key ExportDataset_xxx_z not found)
$this->export_icon[$r]='bom';
$keyforclass = 'BOM'; $keyforclassfile='/bom/class/bom.class.php'; $keyforelement='bom';
$this->export_code[$r] = $this->rights_class.'_'.$r;
$this->export_label[$r] = 'BomAndBomLines'; // Translation key (used only if key ExportDataset_xxx_z not found)
$this->export_icon[$r] = 'bom';
$keyforclass = 'BOM'; $keyforclassfile = '/bom/class/bom.class.php'; $keyforelement = 'bom';
include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
$keyforclass = 'BOMLine'; $keyforclassfile='/bom/class/bom.class.php'; $keyforelement='bomline'; $keyforalias='tl';
$keyforclass = 'BOMLine'; $keyforclassfile = '/bom/class/bom.class.php'; $keyforelement = 'bomline'; $keyforalias = 'tl';
include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
unset($this->export_fields_array[$r]['tl.fk_bom']);
$keyforselect ='bom_bom'; $keyforaliasextra='extra'; $keyforelement='bom';
$keyforselect = 'bom_bom'; $keyforaliasextra = 'extra'; $keyforelement = 'bom';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$keyforselect ='bom_bomline'; $keyforaliasextra='extraline'; $keyforelement='bomline';
$keyforselect = 'bom_bomline'; $keyforaliasextra = 'extraline'; $keyforelement = 'bomline';
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$this->export_dependencies_array[$r]=array('bomline'=>'tl.rowid'); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields)
$this->export_sql_start[$r]='SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'bom_bom as t';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'bom_bomline as tl ON tl.fk_bom = t.rowid';
$this->export_sql_end[$r] .=' WHERE 1 = 1';
$this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('bom').')';
$this->export_dependencies_array[$r] = array('bomline'=>'tl.rowid'); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields)
$this->export_sql_start[$r] = 'SELECT DISTINCT ';
$this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'bom_bom as t';
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bom_bomline as tl ON tl.fk_bom = t.rowid';
$this->export_sql_end[$r] .= ' WHERE 1 = 1';
$this->export_sql_end[$r] .= ' AND t.entity IN ('.getEntity('bom').')';
$r++;
/* END MODULEBUILDER EXPORT BILLOFMATERIALS */
}
@ -319,7 +319,7 @@ class modBom extends DolibarrModules
{
global $conf, $langs;
$result=$this->_load_tables('/bom/sql/');
$result = $this->_load_tables('/bom/sql/');
if ($result < 0) return -1; // Do not activate module if not allowed errors found on module SQL queries (the _load_table run sql with run_sql with error allowed parameter to 'default')
// Create extrafields

View File

@ -21,9 +21,9 @@
*/
/**
* \file htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
* \file htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php
* \ingroup agenda
* \brief Trigger file for agenda module
* \brief Trigger file for company - contactroles
*/
require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
class InterfaceContactRoles extends DolibarrTriggers
{
public $family = 'agenda';
public $description = "Triggers of this module add actions in agenda according to setup made in agenda setup.";
public $description = "Triggers of this module auto link contact to company.";
/**
* Version of the trigger
@ -73,7 +73,6 @@ class InterfaceContactRoles extends DolibarrTriggers
$socid=(property_exists($object, 'socid')?$object->socid:$object->fk_soc);
if (! empty($socid) && $socid > 0) {
global $db, $langs;
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
$contactdefault = new Contact($this->db);
$contactdefault->socid=$socid;
@ -83,7 +82,7 @@ class InterfaceContactRoles extends DolibarrTriggers
if ($object->id > 0)
{
$class = get_class($object);
$cloneFrom = new $class($db);
$cloneFrom = new $class($this->db);
$r = $cloneFrom->fetch($object->id);
if (!empty($cloneFrom->id)) $TContactAlreadyLinked = array_merge($cloneFrom->liste_contact(-1, 'external'), $cloneFrom->liste_contact(-1, 'internal'));

View File

@ -125,7 +125,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO disabled','Executed when a MO is produced','bom',661);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);
-- actions not enabled by default : they are excluded when we enable the module Agenda (except TASK_...)

View File

@ -493,7 +493,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO disabled','Executed when a MO is produced','bom',661);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);

View File

@ -390,7 +390,7 @@ if ($action == 'confirm_generateinvoice')
// Define qty per hour
$qtyhour = round($value['timespent'] / 3600, 2);
$qtyhourtext = convertSecondToTime($value['timespent']);
$qtyhourtext = convertSecondToTime($value['timespent'], 'all', $conf->global->MAIN_DURATION_OF_WORKDAY);
// If no unit price known
if (empty($pu_ht))

View File

@ -231,7 +231,24 @@ if ($action == "change") // Change customer for TakePOS
$idcustomer = GETPOST('idcustomer', 'int');
$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant
// @TODO Check if draft invoice already exists, if not create it or return a warning to ask to enter at least one line to have it created automatically
// Check if draft invoice already exists, if not create it
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' AND entity IN (".getEntity('invoice').")";
$result = $db->query($sql);
$num_lines = $db->num_rows($result);
if ($num_lines==0)
{
require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
$invoice = new Facture($db);
$constforthirdpartyid = 'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"];
$invoice->socid = $conf->global->$constforthirdpartyid;
$invoice->date = dol_now();
$invoice->module_source = 'takepos';
$invoice->pos_source = $_SESSION["takeposterminal"];
$placeid =$invoice->create($user);
$sql="UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid=".$placeid;
$db->query($sql);
}
$sql = "UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
$resql = $db->query($sql);
?>

View File

@ -1315,13 +1315,13 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
{
foreach ($balance->available as $cpt)
{
$arrayzerounitcurrency = array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
if (!in_array($cpt->currency, $arrayzerounitcurrency)) {
$currencybalance[$cpt->currency]->available = $cpt->amount / 100;
} else {
$currencybalance[$cpt->currency]->available = $cpt->amount;
}
$currencybalance[$cpt->currency]->currency = $cpt->currency;
$arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
if (! in_array($cpt->currency, $arrayzerounitcurrency)) {
$currencybalance[$cpt->currency]['available'] = $cpt->amount / 100;
} else {
$currencybalance[$cpt->currency]['available'] = $cpt->amount;
}
$currencybalance[$cpt->currency]['currency'] = $cpt->currency;
}
}
@ -1329,11 +1329,11 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
{
foreach ($balance->pending as $cpt)
{
$arrayzerounitcurrency = array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
if (!in_array($cpt->currency, $arrayzerounitcurrency)) {
$currencybalance[$cpt->currency]->pending = $currencybalance[$cpt->currency]->available + $cpt->amount / 100;
$arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
if (! in_array($cpt->currency, $arrayzerounitcurrency)) {
$currencybalance[$cpt->currency]['pending'] = $currencybalance[$cpt->currency]['available']+$cpt->amount / 100;
} else {
$currencybalance[$cpt->currency]->pending = $currencybalance[$cpt->currency]->available + $cpt->amount;
$currencybalance[$cpt->currency]['pending'] = $currencybalance[$cpt->currency]['available']+$cpt->amount;
}
}
}
@ -1342,7 +1342,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
{
foreach ($currencybalance as $cpt)
{
print '<tr><td>'.$langs->trans("Currency".strtoupper($cpt->currency)).'</td><td>'.price($cpt->available, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).'</td><td>'.price($cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).'</td><td>'.price($cpt->available + $cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt->currency)).'</td></tr>';
print '<tr><td>'.$langs->trans("Currency".strtoupper($cpt['currency'])).'</td><td>'.price($cpt['available'], 0, '', 1, - 1, - 1, strtoupper($cpt['currency'])).'</td><td>'.price($cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt['currency'])).'</td><td>'.price($cpt['available']+$cpt->pending, 0, '', 1, - 1, - 1, strtoupper($cpt['currency'])).'</td></tr>';
}
}

View File

@ -1,6 +1,7 @@
<?php
/* Copyright (C) 2013-2018 Jean-François Ferry <hello@librethic.io>
* Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.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
@ -120,7 +121,7 @@ class Ticket extends CommonObject
public $progress;
/**
* @var int Duration for ticket
* @var string Duration for ticket
*/
public $timing;
@ -250,11 +251,11 @@ class Ticket extends CommonObject
}
if (isset($this->fk_soc)) {
$this->fk_soc = trim($this->fk_soc);
$this->fk_soc = (int) $this->fk_soc;
}
if (isset($this->fk_project)) {
$this->fk_project = trim($this->fk_project);
$this->fk_project = (int) $this->fk_project;
}
if (isset($this->origin_email)) {
@ -262,11 +263,11 @@ class Ticket extends CommonObject
}
if (isset($this->fk_user_create)) {
$this->fk_user_create = trim($this->fk_user_create);
$this->fk_user_create = (int) $this->fk_user_create;
}
if (isset($this->fk_user_assign)) {
$this->fk_user_assign = trim($this->fk_user_assign);
$this->fk_user_assign = (int) $this->fk_user_assign;
}
if (isset($this->subject)) {
@ -278,7 +279,7 @@ class Ticket extends CommonObject
}
if (isset($this->fk_statut)) {
$this->fk_statut = trim($this->fk_statut);
$this->fk_statut = (int) $this->fk_statut;
}
if (isset($this->resolution)) {
@ -746,11 +747,11 @@ class Ticket extends CommonObject
}
if (isset($this->fk_soc)) {
$this->fk_soc = trim($this->fk_soc);
$this->fk_soc = (int) $this->fk_soc;
}
if (isset($this->fk_project)) {
$this->fk_project = trim($this->fk_project);
$this->fk_project = (int) $this->fk_project;
}
if (isset($this->origin_email)) {
@ -758,11 +759,11 @@ class Ticket extends CommonObject
}
if (isset($this->fk_user_create)) {
$this->fk_user_create = trim($this->fk_user_create);
$this->fk_user_create = (int) $this->fk_user_create;
}
if (isset($this->fk_user_assign)) {
$this->fk_user_assign = trim($this->fk_user_assign);
$this->fk_user_assign = (int) $this->fk_user_assign;
}
if (isset($this->subject)) {
@ -774,7 +775,7 @@ class Ticket extends CommonObject
}
if (isset($this->fk_statut)) {
$this->fk_statut = trim($this->fk_statut);
$this->fk_statut = (int) $this->fk_statut;
}
if (isset($this->resolution)) {
@ -1002,12 +1003,12 @@ class Ticket extends CommonObject
$this->ref = 'TI0501-001';
$this->track_id = 'XXXXaaaa';
$this->origin_email = 'email@email.com';
$this->fk_project = '1';
$this->fk_user_create = '1';
$this->fk_user_assign = '1';
$this->fk_project = 1;
$this->fk_user_create = 1;
$this->fk_user_assign = 1;
$this->subject = 'Subject of ticket';
$this->message = 'Message of ticket';
$this->fk_statut = '0';
$this->fk_statut = 0;
$this->resolution = '1';
$this->progress = '10';
$this->timing = '30';