Skip to content
Snippets Groups Projects
Commit 9b66f8c3 authored by Laurent Destailleur's avatar Laurent Destailleur
Browse files

Complete REST services

parent ad981a0f
No related branches found
No related tags found
No related merge requests found
......@@ -109,6 +109,9 @@ foreach ($modulesdir as $dir)
elseif ($module == 'project') {
$moduledirforclass = 'projet';
}
elseif ($module == 'stock') {
$moduledirforclass = 'product/stock';
}
// Defined if module is enabled
$enabled=true;
......
<?php
/* Copyright (C) 2016 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/>.
*/
use Luracast\Restler\RestException;
require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
/**
* API class for warehouses
*
* @access protected
* @class DolibarrApiAccess {@requires user,external}
*/
class Warehouses extends DolibarrApi
{
/**
* @var array $FIELDS Mandatory fields, checked when create and update object
*/
static $FIELDS = array(
'label',
);
/**
* @var Entrepot $warehouse {@type Entrepot}
*/
public $warehouse;
/**
* Constructor
*/
function __construct()
{
global $db, $conf;
$this->db = $db;
$this->warehouse = new Entrepot($this->db);
}
/**
* Get properties of a warehouse object
*
* Return an array with warehouse informations
*
* @param int $id ID of warehouse
* @return array|mixed data without useless information
*
* @throws RestException
*/
function get($id)
{
if(! DolibarrApiAccess::$user->rights->stock->lire) {
throw new RestException(401);
}
$result = $this->warehouse->fetch($id);
if( ! $result ) {
throw new RestException(404, 'warehouse not found');
}
if( ! DolibarrApi::_checkAccessToResource('warehouse',$this->warehouse->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
}
return $this->_cleanObjectDatas($this->warehouse);
}
/**
* List warehouses
*
* Get a list of warehouses
*
* @param string $sortfield Sort field
* @param string $sortorder Sort order
* @param int $limit Limit for list
* @param int $page Page number
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.label:like:'WH-%') and (t.date_creation:<:'20160101')"
* @return array Array of warehouse objects
*
* @throws RestException
*/
function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 0, $page = 0, $sqlfilters = '') {
global $db, $conf;
$obj_ret = array();
if(! DolibarrApiAccess::$user->rights->stock->lire) {
throw new RestException(401);
}
$sql = "SELECT t.rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."entrepot as t";
$sql.= ' WHERE t.entity IN ('.getEntity('stock', 1).')';
// Add sql filters
if ($sqlfilters)
{
if (! DolibarrApi::_checkFilters($sqlfilters))
{
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
}
$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
}
$sql.= $db->order($sortfield, $sortorder);
if ($limit) {
if ($page < 0)
{
$page = 0;
}
$offset = $limit * $page;
$sql.= $db->plimit($limit + 1, $offset);
}
$result = $db->query($sql);
if ($result)
{
$i=0;
$num = $db->num_rows($result);
while ($i < min($num, ($limit <= 0 ? $num : $limit)))
{
$obj = $db->fetch_object($result);
$warehouse_static = new Entrepot($db);
if($warehouse_static->fetch($obj->rowid)) {
$obj_ret[] = parent::_cleanObjectDatas($warehouse_static);
}
$i++;
}
}
else {
throw new RestException(503, 'Error when retrieve warehouse list : '.$warehouse_static->error);
}
if( ! count($obj_ret)) {
throw new RestException(404, 'No warehouse found');
}
return $obj_ret;
}
/**
* Create warehouse object
*
* @param array $request_data Request data
* @return int ID of warehouse
*/
function post($request_data = NULL)
{
if(! DolibarrApiAccess::$user->rights->stock->creer) {
throw new RestException(401);
}
// Check mandatory fields
$result = $this->_validate($request_data);
foreach($request_data as $field => $value) {
$this->warehouse->$field = $value;
}
if($this->warehouse->create(DolibarrApiAccess::$user) < 0) {
throw new RestException(503, 'Error when create warehouse : '.$this->warehouse->error);
}
return $this->warehouse->id;
}
/**
* Update warehouse
*
* @param int $id Id of warehouse to update
* @param array $request_data Datas
* @return int
*/
function put($id, $request_data = NULL)
{
if(! DolibarrApiAccess::$user->rights->stock->creer) {
throw new RestException(401);
}
$result = $this->warehouse->fetch($id);
if( ! $result ) {
throw new RestException(404, 'warehouse not found');
}
if( ! DolibarrApi::_checkAccessToResource('warehouse',$this->warehouse->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
}
foreach($request_data as $field => $value) {
$this->warehouse->$field = $value;
}
if($this->warehouse->update($id, DolibarrApiAccess::$user))
return $this->get ($id);
return false;
}
/**
* Delete warehouse
*
* @param int $id Warehouse ID
* @return array
*/
function delete($id)
{
if(! DolibarrApiAccess::$user->rights->stock->supprimer) {
throw new RestException(401);
}
$result = $this->warehouse->fetch($id);
if( ! $result ) {
throw new RestException(404, 'warehouse not found');
}
if( ! DolibarrApi::_checkAccessToResource('warehouse',$this->warehouse->id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
}
if (! $this->warehouse->delete(DolibarrApiAccess::$user)) {
throw new RestException(401,'error when delete warehouse');
}
return array(
'success' => array(
'code' => 200,
'message' => 'Warehouse deleted'
)
);
}
/**
* Validate fields before create or update object
*
* @param array|null $data Data to validate
* @return array
*
* @throws RestException
*/
function _validate($data)
{
$warehouse = array();
foreach (Warehouses::$FIELDS as $field) {
if (!isset($data[$field]))
throw new RestException(400, "$field field missing");
$warehouse[$field] = $data[$field];
}
return $warehouse;
}
}
......@@ -173,6 +173,8 @@ class Entrepot extends CommonObject
*/
function update($id, $user)
{
if (empty($id)) $id = $this->id;
// Check if new parent is already a child of current warehouse
if(!empty($this->fk_parent)) {
$TChildWarehouses = array($id);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment