21use Luracast\Restler\RestException;
23require_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
24require_once DOL_DOCUMENT_ROOT.
'/salaries/class/paymentsalary.class.php';
38 public static $FIELDS = array(
47 public static $FIELDSPAYMENT = array(
78 public function index($sortfield =
"t.rowid", $sortorder =
'ASC', $limit = 100, $page = 0, $sqlfilters =
'')
82 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'read')
83 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')
84 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
85 throw new RestException(403);
88 $sql =
"SELECT rowid FROM " . MAIN_DB_PREFIX .
"salary as t";
89 $sql .=
' WHERE t.entity IN ('.getEntity(
'user').
')';
90 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
91 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')) {
92 $sql .=
' AND t.fk_user = '.((int) DolibarrApiAccess::$user->
id);
94 $childids = DolibarrApiAccess::$user->getAllChildIds(1);
95 $sql .=
' AND t.fk_user IN ('.$this->db->sanitize(implode(
',', $childids)).
')';
104 throw new RestException(400,
'Error when validating parameter sqlfilters -> '.$errormessage);
108 $sql .= $this->db->order($sortfield, $sortorder);
113 $offset = $limit * $page;
115 $sql .= $this->db->plimit($limit + 1, $offset);
119 $result = $this->db->query($sql);
122 $num = $this->db->num_rows($result);
123 $min = min($num, ($limit <= 0 ? $num : $limit));
124 for ($i = 0; $i < $min; $i++) {
125 $obj = $this->db->fetch_object($result);
126 $salary =
new Salary($this->db);
127 if ($salary->fetch($obj->rowid) > 0) {
132 throw new RestException(503,
'Error when retrieving list of salaries: ' . $this->db->lasterror());
148 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'read')
149 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')
150 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
151 throw new RestException(403);
154 $salary =
new Salary($this->db);
155 $result = $salary->fetch(
$id);
157 throw new RestException(404,
'salary not found');
160 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
161 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')) {
162 if ($salary->fk_user != DolibarrApiAccess::$user->id) {
163 throw new RestException(404,
'salary not found');
166 $childids = DolibarrApiAccess::$user->getAllChildIds(1);
167 if (!in_array($salary->fk_user, $childids)) {
168 throw new RestException(404,
'salary not found');
184 public function post($request_data =
null)
186 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'write')) {
187 throw new RestException(403);
190 $result = $this->
_validate($request_data);
192 $salary =
new Salary($this->db);
193 foreach ($request_data as $field => $value) {
197 if ($salary->create(DolibarrApiAccess::$user) < 0) {
198 throw new RestException(500,
'Error creating salary', array_merge(array($salary->error), $salary->errors));
212 public function put(
$id, $request_data =
null)
214 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'write')) {
215 throw new RestException(403);
218 $salary =
new Salary($this->db);
219 $result = $salary->fetch(
$id);
221 throw new RestException(404,
'salary not found');
224 foreach ($request_data as $field => $value) {
225 if ($field ==
'id') {
231 if ($salary->update(DolibarrApiAccess::$user) > 0) {
232 return $this->
get(
$id);
234 throw new RestException(500, $salary->errorsToString());
283 public function getAllPayments($sortfield =
"t.rowid", $sortorder =
'ASC', $limit = 100, $page = 0)
287 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'read')
288 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')
289 && !DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
290 throw new RestException(403);
293 $sql =
"SELECT t.rowid FROM " . MAIN_DB_PREFIX .
"payment_salary as t, ".MAIN_DB_PREFIX.
"salary as s";
294 $sql .=
' WHERE s.rowid = t.fk_salary AND t.entity IN ('.getEntity(
'salary').
')';
295 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
296 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readchild')) {
297 $sql .=
' AND s.fk_user = '.((int) DolibarrApiAccess::$user->
id).
')';
299 $childids = DolibarrApiAccess::$user->getAllChildIds(1);
300 $sql .=
' AND s.fk_user IN ('.$this->db->sanitize(implode(
',', $childids)).
')';
304 $sql .= $this->db->order($sortfield, $sortorder);
309 $offset = $limit * $page;
311 $sql .= $this->db->plimit($limit + 1, $offset);
316 $result = $this->db->query($sql);
319 $num = $this->db->num_rows($result);
320 $min = min($num, ($limit <= 0 ? $num : $limit));
321 for ($i = 0; $i < $min; $i++) {
322 $obj = $this->db->fetch_object($result);
324 if ($paymentsalary->fetch($obj->rowid) > 0) {
329 throw new RestException(503,
'Error when retrieving list of paymentsalaries: ' . $this->db->lasterror());
351 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'readall')) {
352 throw new RestException(403);
356 $result = $paymentsalary->fetch($pid);
358 throw new RestException(404,
'paymentsalary not found');
379 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'write')) {
380 throw new RestException(403);
385 $salary =
new Salary($this->db);
386 if ($salary->fetch(
$id) <= 0 || empty($salary->id)) {
387 throw new RestException(404,
'Salary not found');
390 if (!is_array($request_data[
'amounts']) || array_diff(array_keys($request_data[
'amounts']), array($salary->id))) {
391 throw new RestException(400,
'amounts must be keyed by the salary id '.$salary->id);
395 $paymentsalary->fk_salary =
$id;
396 foreach ($request_data as $field => $value) {
397 $paymentsalary->$field = $this->
_checkValForAPI($field, $value, $paymentsalary);
400 if (empty($paymentsalary->fk_typepayment)) {
401 $paymentsalary->fk_typepayment = (int) $request_data[
'paiementtype'];
407 if ($paymentsalary->create(DolibarrApiAccess::$user, 1) < 0) {
408 $this->db->rollback();
409 throw new RestException(400,
'Payment error : '.$paymentsalary->errorsToString());
412 $result = $paymentsalary->addPaymentToBank(
413 DolibarrApiAccess::$user,
416 (
int) $request_data[
'accountid'],
421 $this->db->rollback();
422 throw new RestException(400,
'Add payment to bank error : '.$paymentsalary->errorsToString());
428 return $paymentsalary->id;
446 if (!DolibarrApiAccess::$user->hasRight(
'salaries',
'write')) {
447 throw new RestException(403);
451 $result = $paymentsalary->fetch(
$id);
453 throw new RestException(404,
'Payment salary not found');
456 foreach ($request_data as $field => $value) {
457 if ($field ==
'id') {
460 $paymentsalary->$field = $this->
_checkValForAPI($field, $value, $paymentsalary);
463 if ($paymentsalary->update(DolibarrApiAccess::$user) > 0) {
464 return $this->
get(
$id);
466 throw new RestException(500, $paymentsalary->errorsToString());
512 if ($data ===
null) {
516 foreach (Salaries::$FIELDS as $field) {
517 if (!isset($data[$field])) {
518 throw new RestException(400,
"$field field missing");
520 $salary[$field] = $data[$field];
535 if ($data ===
null) {
538 $paymentsalary = array();
539 $fields = Salaries::$FIELDSPAYMENT;
541 array_push($fields,
"accountid");
543 foreach ($fields as $field) {
544 if (!isset($data[$field])) {
545 throw new RestException(400,
"$field field missing");
547 $paymentsalary[$field] = $data[$field];
549 return $paymentsalary;
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
_checkValForAPI($field, $value, $object)
Check and convert a string depending on its type/name.
Class to manage payments of salaries.
index($sortfield="t.rowid", $sortorder='ASC', $limit=100, $page=0, $sqlfilters='')
Get the list of salaries.
put($id, $request_data=null)
Update salary.
__construct()
Constructor.
updatePayment($id, $request_data=null)
Update paymentsalary.
_cleanObjectDatas($object)
Clean sensible object datas @phpstan-template T.
_validate($data)
Delete a payment salary.
getPayments($pid)
Get a given payment.
getAllPayments($sortfield="t.rowid", $sortorder='ASC', $limit=100, $page=0)
Delete salary.
post($request_data=null)
Create salary object.
_validatepayments($data)
Validate fields before creating an object.
addPayment($id, $request_data=null)
Create payment salary on a salary.
Class to manage salary payments.
forgeSQLFromUniversalSearchCriteria($filter, &$errorstr='', $noand=0, $nopar=0, $noerror=0, $forbiddenfields=array())
forgeSQLFromUniversalSearchCriteria
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.