NEW New REST API explorer. Can create invoice and orders with lines.
This commit is contained in:
parent
9ca7f2cb66
commit
4e8e7f8e05
@ -86,8 +86,11 @@ class DolibarrApi
|
||||
function _cleanObjectDatas($object) {
|
||||
|
||||
// Remove $db object property for object
|
||||
unset($object->db);
|
||||
|
||||
unset($object->db);
|
||||
|
||||
// Remove linkedObjects. We should already have linkedObjectIds that avoid huge responses
|
||||
unset($object->linkedObjects);
|
||||
|
||||
// Remove the $oldcopy property because it is not supported by the JSON
|
||||
// encoder. The following error is generated when trying to serialize
|
||||
// it: "Error encoding/decoding JSON: Type is not supported"
|
||||
@ -109,13 +112,15 @@ class DolibarrApi
|
||||
}
|
||||
|
||||
// If object has linked objects, remove $db property
|
||||
/*
|
||||
if(isset($object->linkedObjects) && count($object->linkedObjects) > 0) {
|
||||
foreach($object->linkedObjects as $type_object => $linked_object) {
|
||||
foreach($linked_object as $object2clean) {
|
||||
$this->_cleanObjectDatas($object2clean);
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
||||
|
||||
@ -156,7 +156,7 @@ class Orders extends DolibarrApi
|
||||
throw new RestException(503, 'Error when retrieve commande list');
|
||||
}
|
||||
if( ! count($obj_ret)) {
|
||||
throw new RestException(404, 'No commande found');
|
||||
throw new RestException(404, 'No order found');
|
||||
}
|
||||
return $obj_ret;
|
||||
}
|
||||
@ -178,15 +178,16 @@ class Orders extends DolibarrApi
|
||||
foreach($request_data as $field => $value) {
|
||||
$this->commande->$field = $value;
|
||||
}
|
||||
if (isset($request_data["lines"])) {
|
||||
/*if (isset($request_data["lines"])) {
|
||||
$lines = array();
|
||||
foreach ($request_data["lines"] as $line) {
|
||||
array_push($lines, (object) $line);
|
||||
}
|
||||
$this->commande->lines = $lines;
|
||||
}
|
||||
if(! $this->commande->create(DolibarrApiAccess::$user) ) {
|
||||
throw new RestException(500, "Error while creating order");
|
||||
}*/
|
||||
if ($this->commande->create(DolibarrApiAccess::$user) <= 0) {
|
||||
$errormsg = $this->commande->error;
|
||||
throw new RestException(500, $errormsg ? $errormsg : "Error while creating order");
|
||||
}
|
||||
|
||||
return $this->commande->id;
|
||||
@ -208,7 +209,7 @@ class Orders extends DolibarrApi
|
||||
|
||||
$result = $this->commande->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Commande not found');
|
||||
throw new RestException(404, 'Order not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
|
||||
@ -239,7 +240,7 @@ class Orders extends DolibarrApi
|
||||
|
||||
$result = $this->commande->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Commande not found');
|
||||
throw new RestException(404, 'Order not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
|
||||
|
||||
@ -693,8 +693,8 @@ class Commande extends CommonOrder
|
||||
* Note that this->ref can be set or empty. If empty, we will use "(PROV)"
|
||||
*
|
||||
* @param User $user Objet user that make creation
|
||||
* @param int $notrigger Disable all triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
* @param int $notrigger Disable all triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function create($user, $notrigger=0)
|
||||
{
|
||||
@ -808,37 +808,43 @@ class Commande extends CommonOrder
|
||||
*/
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$line = $this->lines[$i];
|
||||
|
||||
// Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array
|
||||
//if (! is_object($line)) $line=json_decode(json_encode($line), FALSE); // convert recursively array into object.
|
||||
if (! is_object($line)) $line = (object) $line;
|
||||
|
||||
// Reset fk_parent_line for no child products and special product
|
||||
if (($this->lines[$i]->product_type != 9 && empty($this->lines[$i]->fk_parent_line)) || $this->lines[$i]->product_type == 9) {
|
||||
if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
|
||||
$fk_parent_line = 0;
|
||||
}
|
||||
|
||||
$result = $this->addline(
|
||||
$this->lines[$i]->desc,
|
||||
$this->lines[$i]->subprice,
|
||||
$this->lines[$i]->qty,
|
||||
$this->lines[$i]->tva_tx,
|
||||
$this->lines[$i]->localtax1_tx,
|
||||
$this->lines[$i]->localtax2_tx,
|
||||
$this->lines[$i]->fk_product,
|
||||
$this->lines[$i]->remise_percent,
|
||||
$this->lines[$i]->info_bits,
|
||||
$this->lines[$i]->fk_remise_except,
|
||||
$line->desc,
|
||||
$line->subprice,
|
||||
$line->qty,
|
||||
$line->tva_tx,
|
||||
$line->localtax1_tx,
|
||||
$line->localtax2_tx,
|
||||
$line->fk_product,
|
||||
$line->remise_percent,
|
||||
$line->info_bits,
|
||||
$line->fk_remise_except,
|
||||
'HT',
|
||||
0,
|
||||
$this->lines[$i]->date_start,
|
||||
$this->lines[$i]->date_end,
|
||||
$this->lines[$i]->product_type,
|
||||
$this->lines[$i]->rang,
|
||||
$this->lines[$i]->special_code,
|
||||
$line->date_start,
|
||||
$line->date_end,
|
||||
$line->product_type,
|
||||
$line->rang,
|
||||
$line->special_code,
|
||||
$fk_parent_line,
|
||||
$this->lines[$i]->fk_fournprice,
|
||||
$this->lines[$i]->pa_ht,
|
||||
$this->lines[$i]->label,
|
||||
$this->lines[$i]->array_options,
|
||||
$this->lines[$i]->fk_unit,
|
||||
$line->fk_fournprice,
|
||||
$line->pa_ht,
|
||||
$line->label,
|
||||
$line->array_options,
|
||||
$line->fk_unit,
|
||||
$this->element,
|
||||
$this->lines[$i]->id
|
||||
$line->id
|
||||
);
|
||||
if ($result < 0)
|
||||
{
|
||||
@ -851,7 +857,7 @@ class Commande extends CommonOrder
|
||||
return -1;
|
||||
}
|
||||
// Defined the new fk_parent_line
|
||||
if ($result > 0 && $this->lines[$i]->product_type == 9) {
|
||||
if ($result > 0 && $line->product_type == 9) {
|
||||
$fk_parent_line = $result;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2520,58 +2520,6 @@ if ($action == 'create')
|
||||
print '<tr><td>' . $langs->trans('MulticurrencyTotalTTC') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_ttc) . "</td></tr>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Show deprecated optional form to add product line here
|
||||
if (! empty($conf->global->PRODUCT_SHOW_WHEN_CREATE)) {
|
||||
print '<tr><td colspan="3">';
|
||||
|
||||
// Zone de choix des produits predefinis a la creation
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans('ProductsAndServices') . '</td>';
|
||||
print '<td>' . $langs->trans('Qty') . '</td>';
|
||||
print '<td>' . $langs->trans('ReductionShort') . '</td>';
|
||||
print '<td> </td>';
|
||||
if (! empty($conf->service->enabled)) {
|
||||
print '<td>' . $langs->trans('ServiceLimitedDuration') . '</td>';
|
||||
}
|
||||
print '</tr>';
|
||||
for($i = 1; $i <= $NBLINES; $i ++) {
|
||||
print '<tr>';
|
||||
print '<td>';
|
||||
// multiprix
|
||||
if (! empty($conf->global->PRODUIT_MULTIPRICES))
|
||||
$form->select_produits('', 'idprod' . $i, '', $conf->product->limit_size, $soc->price_level);
|
||||
else
|
||||
$form->select_produits('', 'idprod' . $i, '', $conf->product->limit_size);
|
||||
print '</td>';
|
||||
print '<td><input type="text" size="2" name="qty' . $i . '" value="1"></td>';
|
||||
print '<td class="nowrap"><input type="text" size="1" name="remise_percent' . $i . '" value="' . $soc->remise_percent . '">%</td>';
|
||||
print '<td> </td>';
|
||||
// Si le module service est actif, on propose des dates de debut et fin a la ligne
|
||||
if (! empty($conf->service->enabled)) {
|
||||
print '<td class="nowrap">';
|
||||
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
||||
print '<td class="nobordernopadding nowrap">';
|
||||
print $langs->trans('From') . ' ';
|
||||
print '</td><td class="nobordernopadding nowrap">';
|
||||
print $form->select_date('', 'date_start' . $i, $usehm, $usehm, 1, "add", 1, 0, 1);
|
||||
print '</td></tr>';
|
||||
print '<td class="nobordernopadding nowrap">';
|
||||
print $langs->trans('to') . ' ';
|
||||
print '</td><td class="nobordernopadding nowrap">';
|
||||
print $form->select_date('', 'date_end' . $i, $usehm, $usehm, 1, "add", 1, 0, 1);
|
||||
print '</td></tr></table>';
|
||||
print '</td>';
|
||||
}
|
||||
print "</tr>\n";
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
print '</td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
print "</table>\n";
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@ class Invoices extends DolibarrApi
|
||||
|
||||
$result = $this->invoice->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Facture not found');
|
||||
throw new RestException(404, 'Invoice not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
|
||||
@ -128,6 +128,7 @@ class Invoices extends DolibarrApi
|
||||
$sql .= " AND sc.fk_user = ".$search_sale;
|
||||
}
|
||||
|
||||
// TODO remove this, useless for WS
|
||||
$nbtotalofrecords = 0;
|
||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
||||
{
|
||||
@ -178,7 +179,7 @@ class Invoices extends DolibarrApi
|
||||
function post($request_data = NULL)
|
||||
{
|
||||
if(! DolibarrApiAccess::$user->rights->facture->creer) {
|
||||
throw new RestException(401);
|
||||
throw new RestException(401, "Insuffisant rights");
|
||||
}
|
||||
// Check mandatory fields
|
||||
$result = $this->_validate($request_data);
|
||||
@ -189,8 +190,18 @@ class Invoices extends DolibarrApi
|
||||
if(! array_keys($request_data,'date')) {
|
||||
$this->invoice->date = dol_now();
|
||||
}
|
||||
if( ! $this->invoice->create(DolibarrApiAccess::$user)) {
|
||||
throw new RestException(500);
|
||||
/* We keep lines as an array
|
||||
if (isset($request_data["lines"])) {
|
||||
$lines = array();
|
||||
foreach ($request_data["lines"] as $line) {
|
||||
array_push($lines, (object) $line);
|
||||
}
|
||||
$this->invoice->lines = $lines;
|
||||
}*/
|
||||
|
||||
if ($this->invoice->create(DolibarrApiAccess::$user) <= 0) {
|
||||
$errormsg = $this->invoice->error;
|
||||
throw new RestException(500, $errormsg ? $errormsg : "Error while creating order");
|
||||
}
|
||||
return $this->invoice->id;
|
||||
}
|
||||
@ -210,7 +221,7 @@ class Invoices extends DolibarrApi
|
||||
|
||||
$result = $this->invoice->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Facture not found');
|
||||
throw new RestException(404, 'Invoice not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
|
||||
@ -240,7 +251,7 @@ class Invoices extends DolibarrApi
|
||||
}
|
||||
$result = $this->invoice->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Facture not found');
|
||||
throw new RestException(404, 'Invoice not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('facture',$this->facture->id)) {
|
||||
|
||||
@ -449,7 +449,7 @@ class Facture extends CommonInvoice
|
||||
/*
|
||||
* Insert lines of invoices into database
|
||||
*/
|
||||
if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array on InvoiceLines (preferred mode)
|
||||
if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array of InvoiceLines (preferred mode)
|
||||
{
|
||||
$fk_parent_line = 0;
|
||||
|
||||
@ -483,49 +483,56 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
}
|
||||
}
|
||||
else // If this->lines is not object of invoice lines
|
||||
else // If this->lines is an array of invoice line arrays
|
||||
{
|
||||
$fk_parent_line = 0;
|
||||
|
||||
dol_syslog("There is ".count($this->lines)." lines that are array lines");
|
||||
|
||||
foreach ($this->lines as $i => $val)
|
||||
{
|
||||
if (($this->lines[$i]->info_bits & 0x01) == 0) // We keep only lines with first bit = 0
|
||||
$line = $this->lines[$i];
|
||||
|
||||
// Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array
|
||||
//if (! is_object($line)) $line=json_decode(json_encode($line), FALSE); // convert recursively array into object.
|
||||
if (! is_object($line)) $line = (object) $line;
|
||||
|
||||
if (($line->info_bits & 0x01) == 0) // We keep only lines with first bit = 0
|
||||
{
|
||||
// Reset fk_parent_line for no child products and special product
|
||||
if (($this->lines[$i]->product_type != 9 && empty($this->lines[$i]->fk_parent_line)) || $this->lines[$i]->product_type == 9) {
|
||||
if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
|
||||
$fk_parent_line = 0;
|
||||
}
|
||||
|
||||
$result = $this->addline(
|
||||
$this->lines[$i]->desc,
|
||||
$this->lines[$i]->subprice,
|
||||
$this->lines[$i]->qty,
|
||||
$this->lines[$i]->tva_tx,
|
||||
$this->lines[$i]->localtax1_tx,
|
||||
$this->lines[$i]->localtax2_tx,
|
||||
$this->lines[$i]->fk_product,
|
||||
$this->lines[$i]->remise_percent,
|
||||
$this->lines[$i]->date_start,
|
||||
$this->lines[$i]->date_end,
|
||||
$this->lines[$i]->fk_code_ventilation,
|
||||
$this->lines[$i]->info_bits,
|
||||
$this->lines[$i]->fk_remise_except,
|
||||
$line->desc,
|
||||
$line->subprice,
|
||||
$line->qty,
|
||||
$line->tva_tx,
|
||||
$line->localtax1_tx,
|
||||
$line->localtax2_tx,
|
||||
$line->fk_product,
|
||||
$line->remise_percent,
|
||||
$line->date_start,
|
||||
$line->date_end,
|
||||
$line->fk_code_ventilation,
|
||||
$line->info_bits,
|
||||
$line->fk_remise_except,
|
||||
'HT',
|
||||
0,
|
||||
$this->lines[$i]->product_type,
|
||||
$this->lines[$i]->rang,
|
||||
$this->lines[$i]->special_code,
|
||||
$line->product_type,
|
||||
$line->rang,
|
||||
$line->special_code,
|
||||
$this->element,
|
||||
$this->lines[$i]->id,
|
||||
$line->id,
|
||||
$fk_parent_line,
|
||||
$this->lines[$i]->fk_fournprice,
|
||||
$this->lines[$i]->pa_ht,
|
||||
$this->lines[$i]->label,
|
||||
$this->lines[$i]->array_options,
|
||||
$this->lines[$i]->situation_percent,
|
||||
$this->lines[$i]->fk_prev_id,
|
||||
$this->lines[$i]->fk_unit
|
||||
$line->fk_fournprice,
|
||||
$line->pa_ht,
|
||||
$line->label,
|
||||
$line->array_options,
|
||||
$line->situation_percent,
|
||||
$line->fk_prev_id,
|
||||
$line->fk_unit
|
||||
);
|
||||
if ($result < 0)
|
||||
{
|
||||
@ -536,7 +543,7 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
|
||||
// Defined the new fk_parent_line
|
||||
if ($result > 0 && $this->lines[$i]->product_type == 9) {
|
||||
if ($result > 0 && $line->product_type == 9) {
|
||||
$fk_parent_line = $result;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user