dolibarr/htdocs/expensereport/class/expensereport_rule.class.php

292 lines
6.6 KiB
PHP
Raw Normal View History

<?php
/* Copyright (C) 2017 ATM Consulting <support@atm-consulting.fr>
* Copyright (C) 2017 Pierre-Henry Favre <phf@atm-consulting.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
2019-09-23 21:55:30 +02:00
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/expensereport/class/expensereport_ik.class.php
* \ingroup expenseik
* \brief File of class to manage expense ik
*/
2017-10-13 13:10:36 +02:00
2022-05-18 11:00:43 +02:00
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
/**
* Class to manage inventories
*/
2022-05-18 11:00:43 +02:00
class ExpenseReportRule extends CommonObject
{
2018-08-23 18:35:45 +02:00
/**
* @var string ID to identify managed object
*/
public $element = 'expenserule';
2018-10-06 12:01:00 +02:00
2018-08-22 18:48:53 +02:00
/**
* @var string Name of table without prefix where object is stored
*/
public $table_element = 'expensereport_rules';
2018-10-06 12:01:00 +02:00
/**
2020-12-05 23:53:55 +01:00
* @var string Fieldname with ID of parent key if this field has a parent
2018-10-06 12:01:00 +02:00
*/
public $fk_element = 'fk_expense_rule';
2017-10-13 13:10:36 +02:00
/**
* date start
2017-10-13 13:10:36 +02:00
* @var int|string
*/
public $dates;
2017-10-13 13:10:36 +02:00
/**
* date end
2017-10-13 13:10:36 +02:00
* @var int|string
*/
public $datee;
2017-10-13 13:10:36 +02:00
/**
* amount
* @var double
*/
public $amount;
2017-10-13 13:10:36 +02:00
/**
* restrective
* @var int
*/
public $restrictive;
2017-10-13 13:10:36 +02:00
/**
* rule for user
* @var int
*/
public $fk_user;
2017-10-13 13:10:36 +02:00
/**
* rule for group
* @var int
*/
public $fk_usergroup;
2017-10-13 13:10:36 +02:00
/**
* c_type_fees id
* @var int
*/
public $fk_c_type_fees;
2017-10-13 13:10:36 +02:00
/**
* code type of expense report
* @var string
*/
public $code_expense_rules_type;
2017-10-13 13:10:36 +02:00
/**
* rule for all
* @var int
*/
public $is_for_all;
2017-10-13 13:10:36 +02:00
/**
* entity
* @var int
*/
public $entity;
2017-10-13 13:10:36 +02:00
/**
* Attribute object linked with database
* @var array
*/
public $fields = array(
'rowid'=>array('type'=>'integer', 'index'=>true)
,'dates'=>array('type'=>'date')
,'datee'=>array('type'=>'date')
,'amount'=>array('type'=>'double')
,'restrictive'=>array('type'=>'integer')
,'fk_user'=>array('type'=>'integer')
,'fk_usergroup'=>array('type'=>'integer')
,'fk_c_type_fees'=>array('type'=>'integer')
,'code_expense_rules_type'=>array('type'=>'string')
,'is_for_all'=>array('type'=>'integer')
,'entity'=>array('type'=>'integer')
);
2022-05-18 11:00:43 +02:00
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
2022-05-18 11:00:43 +02:00
public function __construct(DoliDB $db)
{
$this->db = $db;
}
/**
* Create object into database
*
* @param User $user User that creates
* @param bool $notrigger false=launch triggers after, true=disable triggers
* @return int <0 if KO, Id of created object if OK
*/
public function create(User $user, $notrigger = false)
{
2022-05-18 11:00:43 +02:00
$resultcreate = $this->createCommon($user, $notrigger);
2022-05-18 11:00:43 +02:00
//$resultvalidate = $this->validate($user, $notrigger);
2017-10-13 13:10:36 +02:00
2022-05-18 11:00:43 +02:00
return $resultcreate;
}
/**
* Load object in memory from the database
*
* @param int $id Id object
* @param string $ref Ref
* @return int <0 if KO, 0 if not found, >0 if OK
*/
public function fetch($id, $ref = null)
{
$result = $this->fetchCommon($id, $ref);
if ($result > 0 && !empty($this->table_element_line)) {
$this->fetchLines();
}
return $result;
}
2017-10-13 13:10:36 +02:00
2022-05-18 11:00:43 +02:00
/**
* Update object into database
*
* @param User $user User that modifies
* @param bool $notrigger false=launch triggers after, true=disable triggers
* @return int <0 if KO, >0 if OK
*/
public function update(User $user, $notrigger = false)
{
return $this->updateCommon($user, $notrigger);
}
/**
* Delete object in database
*
* @param User $user User that deletes
* @param bool $notrigger false=launch triggers after, true=disable triggers
* @return int <0 if KO, >0 if OK
*/
public function delete(User $user, $notrigger = false)
{
return $this->deleteCommon($user, $notrigger);
//return $this->deleteCommon($user, $notrigger, 1);
}
/**
* Return all rules or filtered by something
2017-10-13 13:10:36 +02:00
*
2019-04-04 18:33:12 +02:00
* @param int $fk_c_type_fees type of expense
* @param integer $date date of expense
* @param int $fk_user user of expense
* @return array Array with ExpenseReportRule
*/
2021-09-27 15:41:58 +02:00
public function getAllRule($fk_c_type_fees = '', $date = '', $fk_user = '')
{
$rules = array();
2021-09-27 15:41:58 +02:00
$sql = 'SELECT er.rowid';
$sql .= ' FROM '.MAIN_DB_PREFIX.'expensereport_rules er';
2021-09-27 15:41:58 +02:00
$sql .= ' WHERE er.entity IN (0,'.getEntity($this->element).')';
2021-02-25 22:45:02 +01:00
if (!empty($fk_c_type_fees)) {
2021-08-28 01:45:53 +02:00
$sql .= ' AND er.fk_c_type_fees IN (-1, '.((int) $fk_c_type_fees).')';
}
2021-02-25 22:45:02 +01:00
if (!empty($date)) {
2021-09-27 15:41:58 +02:00
$sql .= " AND er.dates <= '".$this->db->idate($date)."'";
$sql .= " AND er.datee >= '".$this->db->idate($date)."'";
}
2021-02-25 22:45:02 +01:00
if ($fk_user > 0) {
$sql .= ' AND (er.is_for_all = 1';
2021-04-26 19:12:23 +02:00
$sql .= ' OR er.fk_user = '.((int) $fk_user);
2021-03-30 11:36:50 +02:00
$sql .= ' OR er.fk_usergroup IN (SELECT ugu.fk_usergroup FROM '.MAIN_DB_PREFIX.'usergroup_user ugu WHERE ugu.fk_user = '.((int) $fk_user).') )';
}
$sql .= ' ORDER BY er.is_for_all, er.fk_usergroup, er.fk_user';
2017-10-13 13:10:36 +02:00
2021-08-28 01:45:53 +02:00
dol_syslog("ExpenseReportRule::getAllRule");
2017-10-13 13:10:36 +02:00
2021-09-27 15:41:58 +02:00
$resql = $this->db->query($sql);
2021-02-25 22:45:02 +01:00
if ($resql) {
2021-09-27 15:41:58 +02:00
while ($obj = $this->db->fetch_object($resql)) {
$rule = new ExpenseReportRule($this->db);
2021-02-25 22:45:02 +01:00
if ($rule->fetch($obj->rowid) > 0) {
$rules[$rule->id] = $rule;
} else {
2021-09-27 15:41:58 +02:00
dol_print_error($this->db);
2021-02-25 22:45:02 +01:00
}
}
2020-05-21 15:05:19 +02:00
} else {
2021-09-27 15:41:58 +02:00
dol_print_error($this->db);
}
2017-10-13 13:10:36 +02:00
return $rules;
}
2017-10-13 13:10:36 +02:00
/**
* Return the label of group for the current object
2017-10-13 13:10:36 +02:00
*
* @return string
*/
public function getGroupLabel()
{
include_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
2017-10-13 13:10:36 +02:00
2021-02-25 22:45:02 +01:00
if ($this->fk_usergroup > 0) {
$group = new UserGroup($this->db);
2021-02-25 22:45:02 +01:00
if ($group->fetch($this->fk_usergroup) > 0) {
2021-09-27 15:41:58 +02:00
return $group->name;
2020-05-21 15:05:19 +02:00
} else {
$this->error = $group->error;
$this->errors[] = $this->error;
}
}
2017-10-13 13:10:36 +02:00
return '';
}
2017-10-13 13:10:36 +02:00
/**
* Return the name of user for the current object
2017-10-13 13:10:36 +02:00
*
* @return string
*/
public function getUserName()
{
include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
2017-10-13 13:10:36 +02:00
2021-02-25 22:45:02 +01:00
if ($this->fk_user > 0) {
$u = new User($this->db);
2021-02-25 22:45:02 +01:00
if ($u->fetch($this->fk_user) > 0) {
return dolGetFirstLastname($u->firstname, $u->lastname);
2020-05-21 15:05:19 +02:00
} else {
$this->error = $u->error;
$this->errors[] = $this->error;
}
}
2017-10-13 13:10:36 +02:00
return '';
}
}