diff --git a/htdocs/webservices/demo_wsclient_order.php-NORUN b/htdocs/webservices/demo_wsclient_order.php-NORUN new file mode 100755 index 00000000000..d5b51c12a6b --- /dev/null +++ b/htdocs/webservices/demo_wsclient_order.php-NORUN @@ -0,0 +1,141 @@ + + * + * 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 2 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 . + */ + +/** + * \file htdocs/webservices/demo_wsclient_order.php + * \brief Demo page to make a client call to Dolibarr WebServices "server_order" + */ + +// This is to make Dolibarr working with Plesk +set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs'); + +require_once '../master.inc.php'; +require_once NUSOAP_PATH.'/nusoap.php'; // Include SOAP + +$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_order.php'; +//$WS_DOL_URL = 'http://localhost:8080/'; // To test with Soapui mock. If not a page, should end with / +$WS_METHOD1 = 'getOrder'; +$WS_METHOD2 = 'getOrdersForThirdParty'; +$ns='http://www.dolibarr.org/ns/'; + + +// Set the WebService URL +dol_syslog("Create nusoap_client for URL=".$WS_DOL_URL); +$soapclient1 = new nusoap_client($WS_DOL_URL); +if ($soapclient1) +{ + $soapclient1->soap_defencoding='UTF-8'; + $soapclient1->decodeUTF8(false); +} +$soapclient2 = new nusoap_client($WS_DOL_URL); +if ($soapclient2) +{ + $soapclient2->soap_defencoding='UTF-8'; + $soapclient2->decodeUTF8(false); +} + +// Call the WebService method and store its result in $result. +$authentication=array( + 'dolibarrkey'=>$conf->global->WEBSERVICES_KEY, + 'sourceapplication'=>'DEMO', + 'login'=>'admin', + 'password'=>'changeme', + 'entity'=>''); + + +// Test url 1 +if ($WS_METHOD1) +{ + $parameters = array('authentication'=>$authentication,'id'=>1,'ref'=>''); + dol_syslog("Call method ".$WS_METHOD1); + $result1 = $soapclient1->call($WS_METHOD1,$parameters,$ns,''); + if (! $result1) + { + print $soapclient1->error_str; + print "
\n\n"; + print $soapclient1->request; + print "
\n\n"; + print $soapclient1->response; + exit; + } +} + +// Test url 2 +if ($WS_METHOD2) +{ + $parameters = array('authentication'=>$authentication,'idthirdparty'=>'4'); + dol_syslog("Call method ".$WS_METHOD2); + $result2 = $soapclient2->call($WS_METHOD2,$parameters,$ns,''); + if (! $result2) + { + print $soapclient2->error_str; + print "
\n\n"; + print $soapclient2->request; + print "
\n\n"; + print $soapclient2->response; + exit; + } +} + + +/* + * View + */ + +header("Content-type: text/html; charset=utf8"); +print ''."\n"; +echo ''."\n"; +echo ''; +echo 'WebService Test: '.$WS_METHOD1.''; +echo ''."\n"; + +echo ''."\n"; +echo 'NUSOAP_PATH='.NUSOAP_PATH.'
'; + +echo "

Request:

"; +echo '

Function

'; +echo $WS_METHOD1; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient1->request, ENT_QUOTES) . '
'; +echo '
'; +echo "

Response:

"; +echo '

Result

'; +echo '
';
+print_r($result1);
+echo '
'; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient1->response, ENT_QUOTES) . '
'; + +print '
'; + +echo "

Request:

"; +echo '

Function

'; +echo $WS_METHOD2; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient2->request, ENT_QUOTES) . '
'; +echo '
'; +echo "

Response:

"; +echo '

Result

'; +echo '
';
+print_r($result2);
+echo '
'; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient2->response, ENT_QUOTES) . '
'; + +echo ''."\n";; +echo ''."\n";; +?> diff --git a/htdocs/webservices/server_order.php b/htdocs/webservices/server_order.php new file mode 100644 index 00000000000..951147c9bee --- /dev/null +++ b/htdocs/webservices/server_order.php @@ -0,0 +1,778 @@ + + * Copyright (C) 2012 JF FERRY +* +* 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 2 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 . +*/ + +/** + * \file htdocs/webservices/server_order.php + * \brief File that is entry point to call Dolibarr WebServices + */ + + +// This is to make Dolibarr working with Plesk +set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs'); + +require_once '../master.inc.php'; +require_once NUSOAP_PATH.'/nusoap.php'; // Include SOAP +require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php'; + +require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php"); + + +dol_syslog("Call Dolibarr webservices interfaces"); + +// Enable and test if module web services is enabled +if (empty($conf->global->MAIN_MODULE_WEBSERVICES)) +{ + $langs->load("admin"); + dol_syslog("Call Dolibarr webservices interfaces with module webservices disabled"); + print $langs->trans("WarningModuleNotActive",'WebServices').'.

'; + print $langs->trans("ToActivateModule"); + exit; +} + +// Create the soap Object +$server = new nusoap_server(); +$server->soap_defencoding='UTF-8'; +$server->decode_utf8=false; +$ns='http://www.dolibarr.org/ns/'; +$server->configureWSDL('WebServicesDolibarrOrder',$ns); +$server->wsdl->schemaTargetNamespace=$ns; + + +// Define WSDL content +$server->wsdl->addComplexType( + 'authentication', + 'complexType', + 'struct', + 'all', + '', + array( + 'dolibarrkey' => array('name'=>'dolibarrkey','type'=>'xsd:string'), + 'sourceapplication' => array('name'=>'sourceapplication','type'=>'xsd:string'), + 'login' => array('name'=>'login','type'=>'xsd:string'), + 'password' => array('name'=>'password','type'=>'xsd:string'), + 'entity' => array('name'=>'entity','type'=>'xsd:string'), + ) +); + +$server->wsdl->addComplexType( + 'line', + 'complexType', + 'struct', + 'all', + '', + array( + 'id' => array('name'=>'id','type'=>'xsd:string'), + 'fk_commande' => array('name'=>'fk_commande','type'=>'xsd:int'), + 'fk_parent_line' => array('name'=>'fk_parent_line','type'=>'xsd:int'), + 'desc' => array('name'=>'desc','type'=>'xsd:string'), + 'qty' => array('name'=>'qty','type'=>'xsd:int'), + 'price' => array('name'=>'price','type'=>'xsd:double'), + 'subprice' => array('name'=>'subprice','type'=>'xsd:double'), + 'tva_tx' => array('name'=>'tva_tx','type'=>'xsd:double'), + + 'remise' => array('name'=>'remise','type'=>'xsd:double'), + 'remise_percent' => array('name'=>'remise_percent','type'=>'xsd:double'), + + 'fk_product' => array('name'=>'fk_product','type'=>'xsd:int'), + 'product_type' => array('name'=>'product_type','type'=>'xsd:int'), + 'total_ht' => array('name'=>'total_ht','type'=>'xsd:double'), + 'total_tva' => array('name'=>'totaltva','type'=>'xsd:double'), + 'total_ttc' => array('name'=>'total_ttc','type'=>'xsd:double'), + + 'date_start' => array('name'=>'date_start','type'=>'xsd:string'), + 'date_end' => array('name'=>'date_end','type'=>'xsd:string'), + + // From product + 'product_ref' => array('name'=>'product_ref','type'=>'xsd:string'), + 'product_label' => array('name'=>'product_label','type'=>'xsd:string'), + 'product_desc' => array('name'=>'product_desc','type'=>'xsd:string') + ) +); + +$server->wsdl->addComplexType( + 'LinesArray', + 'complexType', + 'array', + '', + 'SOAP-ENC:Array', + array(), + array( + array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:line[]') + ), + 'tns:line' +); +$server->wsdl->addComplexType( + 'LinesArray2', + 'complexType', + 'array', + 'sequence', + '', + array( + 'line' => array( + 'name' => 'line', + 'type' => 'tns:line', + 'minOccurs' => '0', + 'maxOccurs' => 'unbounded' + ) + ) +); + + +$server->wsdl->addComplexType( + 'order', + 'complexType', + 'struct', + 'all', + '', + array( + 'id' => array('name'=>'id','type'=>'xsd:string'), + 'ref' => array('name'=>'ref','type'=>'xsd:string'), + 'ref_client' => array('name'=>'ref_client','type'=>'xsd:string'), + 'ref_ext' => array('name'=>'ref_ext','type'=>'xsd:string'), + 'ref_int' => array('name'=>'ref_int','type'=>'xsd:string'), + 'socid' => array('name'=>'socid','type'=>'xsd:int'), + 'statut' => array('name'=>'statut','type'=>'xsd:int'), + 'facturee' => array('name'=>'facturee','type'=>'xsd:string'), + 'total_ht' => array('name'=>'total_ht','type'=>'xsd:double'), + 'total_tva' => array('name'=>'total_tva','type'=>'xsd:double'), + 'total_localtax1' => array('name'=>'total_localtax1','type'=>'xsd:double'), + 'total_localtax2' => array('name'=>'total_localtax2','type'=>'xsd:double'), + 'total_ttc' => array('name'=>'total_ttc','type'=>'xsd:double'), + 'date' => array('name'=>'date','type'=>'xsd:date'), + 'date_commande' => array('name'=>'date_commande','type'=>'xsd:date'), + 'remise' => array('name'=>'remise','type'=>'xsd:string'), + 'remise_percent' => array('name'=>'remise_percent','type'=>'xsd:string'), + 'remise_absolue' => array('name'=>'remise_absolue','type'=>'xsd:string'), + 'source' => array('name'=>'source','type'=>'xsd:string'), + 'note' => array('name'=>'note','type'=>'xsd:string'), + 'note_public' => array('name'=>'note_public','type'=>'xsd:string'), + 'fk_project' => array('name'=>'fk_project','type'=>'xsd:string'), + + 'mode_reglement_id' => array('name'=>'mode_reglement_id','type'=>'xsd:string'), + 'mode_reglement_code' => array('name'=>'mode_reglement_code','type'=>'xsd:string'), + 'mode_reglement' => array('name'=>'mode_reglement','type'=>'xsd:string'), + 'cond_reglement_id' => array('name'=>'cond_reglement_id','type'=>'xsd:string'), + 'cond_reglement_code' => array('name'=>'cond_reglement_code','type'=>'xsd:string'), + 'cond_reglement' => array('name'=>'cond_reglement','type'=>'xsd:string'), + 'cond_reglement_doc' => array('name'=>'cond_reglement_doc','type'=>'xsd:string'), + + 'date_livraison' => array('name'=>'date_livraison','type'=>'xsd:date'), + 'fk_delivery_address' => array('name'=>'fk_delivery_address','type'=>'xsd:int'), + 'demand_reason_id' => array('name'=>'demand_reason_id','type'=>'xsd:string'), + + 'lines' => array('name'=>'lines','type'=>'tns:LinesArray') + ) +); + +$server->wsdl->addComplexType( + 'OrdersArray', + 'complexType', + 'array', + '', + 'SOAP-ENC:Array', + array(), + array( + array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:order[]') + ), + 'tns:order' +); + +$server->wsdl->addComplexType( + 'OrdersArray2', + 'complexType', + 'array', + 'sequence', + '', + array( + 'order' => array( + 'name' => 'invoice', + 'type' => 'tns:invoice', + 'minOccurs' => '0', + 'maxOccurs' => 'unbounded' + ) + ) +); + +$server->wsdl->addComplexType( + 'result', + 'complexType', + 'struct', + 'all', + '', + array( + 'result_code' => array('name'=>'result_code','type'=>'xsd:string'), + 'result_label' => array('name'=>'result_label','type'=>'xsd:string'), + ) +); + + + +// 5 styles: RPC/encoded, RPC/literal, Document/encoded (not WS-I compliant), Document/literal, Document/literal wrapped +// Style merely dictates how to translate a WSDL binding to a SOAP message. Nothing more. You can use either style with any programming model. +// http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ +$styledoc='rpc'; // rpc/document (document is an extend into SOAP 1.0 to support unstructured messages) +$styleuse='encoded'; // encoded/literal/literal wrapped +// Better choice is document/literal wrapped but literal wrapped not supported by nusoap. + +// Register WSDL +$server->register('getOrder', +// Entry values + array('authentication'=>'tns:authentication','id'=>'xsd:string','ref'=>'xsd:string','ref_ext'=>'xsd:string'), + // Exit values + array('result'=>'tns:result','order'=>'tns:order'), + $ns, + $ns.'#getOrder', + $styledoc, + $styleuse, + 'WS to get a particular invoice' +); + +$server->register('getOrdersForThirdParty', +// Entry values + array('authentication'=>'tns:authentication','idthirdparty'=>'xsd:string'), + // Exit values + array('result'=>'tns:result','orders'=>'tns:OrdersArray2'), + $ns, + $ns.'#getOrdersForThirdParty', + $styledoc, + $styleuse, + 'WS to get all orders of a third party' +); + +$server->register('createOrder', +// Entry values + array('authentication'=>'tns:authentication','order'=>'tns:order'), + // Exit values + array('result'=>'tns:result','id'=>'xsd:string'), + $ns, + $ns.'#createOrder', + $styledoc, + $styleuse, + 'WS to create an order' +); + + +// Register WSDL +$server->register('validOrder', +// Entry values + array('authentication'=>'tns:authentication','id'=>'xsd:string'), + // Exit values + array('result'=>'tns:result'), + $ns, + $ns.'#validOrder', + $styledoc, + $styleuse, + 'WS to valid an order' +); + +/** + * Get order from id, ref or ref_ext. + * + * @param array $authentication Array of authentication information + * @param int $id Id + * @param string $ref Ref + * @param string $ref_ext Ref_ext + * @return array Array result + */ +function getOrder($authentication,$id='',$ref='',$ref_ext='') +{ + global $db,$conf,$langs; + + dol_syslog("Function: getOrder login=".$authentication['login']." id=".$id." ref=".$ref." ref_ext=".$ref_ext); + + if ($authentication['entity']) $conf->entity=$authentication['entity']; + + // Init and check authentication + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + + $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel); + + if ($fuser->societe_id) $socid=$fuser->societe_id; + + // Check parameters + if (! $error && (($id && $ref) || ($id && $ref_ext) || ($ref && $ref_ext))) + { + $error++; + $errorcode='BAD_PARAMETERS'; $errorlabel="Parameter id, ref and ref_ext can't be both provided. You must choose one or other but not both."; + } + + if (! $error) + { + $fuser->getrights(); + + if ($fuser->rights->commande->lire) + { + $order=new Commande($db); + $result=$order->fetch($id,$ref,$ref_ext); + if ($result > 0) + { + // Security for external user + if( $socid && ( $socid != $order->socid) ) + { + $error++; + $errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.'User does not have permission for this request'; + } + + if(!$error) + { + + $linesresp=array(); + $i=0; + foreach($order->lines as $line) + { + //var_dump($line); exit; + $linesresp[]=array( + 'id'=>$line->rowid, + 'fk_commande'=>$line->fk_commande, + 'fk_parent_line'=>$line->fk_parent_line, + 'desc'=>$line->desc, + 'qty'=>$line->qty, + 'price'=>$line->price, + 'subprice'=>$line->subprice, + 'tva_tx'=>$line->tva_tx, + 'remise'=>$line->remise, + 'remise_percent'=>$line->remise_percent, + 'fk_product'=>$line->fk_product, + 'product_type'=>$line->product_type, + 'total_ht'=>$line->total_ht, + 'total_tva'=>$line->total_tva, + 'total_ttc'=>$line->total_ttc, + 'date_start'=>$line->date_start, + 'date_end'=>$line->date_end, + 'product_ref'=>$line->product_ref, + 'product_label'=>$line->product_label, + 'product_desc'=>$line->product_desc + ); + $i++; + } + + // Create order + $objectresp = array( + 'result'=>array('result_code'=>'OK', 'result_label'=>''), + 'order'=>array( + 'id' => $order->id, + 'ref' => $order->ref, + 'ref_client' => $order->ref_client, + 'ref_ext' => $order->ref_ext, + 'ref_int' => $order->ref_int, + 'socid' => $order->socid, + 'statut' => $order->statut, + + 'total_ht' => $order->total_ht, + 'total_tva' => $order->total_tva, + 'total_localtax1' => $order->total_localtax1, + 'total_localtax2' => $order->total_localtax2, + 'total_ttc' => $order->total_ttc, + 'fk_project' => $order->fk_project, + + 'date' => $order->date?dol_print_date($order->date,'dayrfc'):'', + 'date_commande' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'', + + 'remise' => $order->remise, + 'remise_percent' => $order->remise_percent, + 'remise_absolue' => $order->remise_absolue, + + 'source' => $order->source, + 'facturee' => $order->facturee, + 'note' => $order->note, + 'note_public' => $order->note_public, + 'cond_reglement_id' => $order->cond_reglement_id, + 'cond_reglement' => $order->cond_reglement, + 'cond_reglement_doc' => $order->cond_reglement_doc, + 'cond_reglement_code' => $order->cond_reglement_code, + 'mode_reglement_id' => $order->mode_reglement_id, + 'mode_reglement' => $order->mode_reglement, + 'mode_reglement_code' => $order->mode_reglement_code, + + 'date_livraison' => $order->date_livraison, + 'fk_delivery_address' => $order->fk_delivery_address, + + 'demand_reason_id' => $order->demand_reason_id, + 'demand_reason_code' => $order->demand_reason_code, + + 'lines' => $linesresp + )); + } + } + else + { + $error++; + $errorcode='NOT_FOUND'; $errorlabel='Object not found for id='.$id.' nor ref='.$ref.' nor ref_ext='.$ref_ext; + } + } + else + { + $error++; + $errorcode='PERMISSION_DENIED'; $errorlabel='User does not have permission for this request'; + } + } + + if ($error) + { + $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel)); + } + + return $objectresp; +} + + +/** + * Get list of orders for third party + * @param array $authentication Array of authentication information + * @param int $idthirdparty Id of thirdparty + * @return array Array result + */ +function getOrdersForThirdParty($authentication,$idthirdparty) +{ + global $db,$conf,$langs; + + dol_syslog("Function: getOrdersForThirdParty login=".$authentication['login']." idthirdparty=".$idthirdparty); + + if ($authentication['entity']) $conf->entity=$authentication['entity']; + + // Init and check authentication + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel); + + if ($fuser->societe_id) $socid=$fuser->societe_id; + + // Check parameters + if (! $error && !$idthirdparty) + { + $error++; + $errorcode='BAD_PARAMETERS'; $errorlabel='Parameter id is not provided'; + } + + if (! $error) + { + $linesorders=array(); + + $sql.='SELECT c.rowid as orderid'; + $sql.=' FROM '.MAIN_DB_PREFIX.'commande as c'; + $sql.=" WHERE c.entity = ".$conf->entity; + if ($idthirdparty != 'all' ) $sql.=" AND c.fk_soc = ".$db->escape($idthirdparty); + + + $resql=$db->query($sql); + if ($resql) + { + $num=$db->num_rows($resql); + $i=0; + while ($i < $num) + { + // En attendant remplissage par boucle + $obj=$db->fetch_object($resql); + + $order=new Commande($db); + $order->fetch($obj->orderid); + + // Sécurité pour utilisateur externe + if( $socid && ( $socid != $order->socid) ) + { + $error++; + $errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.'User does not have permission for this request'; + } + + if(!$error) + { + + // Define lines of invoice + $linesresp=array(); + foreach($order->lines as $line) + { + $linesresp[]=array( + 'id'=>$line->rowid, + 'fk_commande'=>$line->fk_commande, + 'fk_parent_line'=>$line->fk_parent_line, + 'desc'=>$line->desc, + 'qty'=>$line->qty, + 'price'=>$line->price, + 'subprice'=>$line->subprice, + 'tva_tx'=>$line->tva_tx, + 'remise'=>$line->remise, + 'remise_percent'=>$line->remise_percent, + 'fk_product'=>$line->fk_product, + 'product_type'=>$line->product_type, + 'total_ht'=>$line->total_ht, + 'total_tva'=>$line->total_tva, + 'total_ttc'=>$line->total_ttc, + 'date_start'=>$line->date_start, + 'date_end'=>$line->date_end, + 'product_ref'=>$line->product_ref, + 'product_label'=>$line->product_label, + 'product_desc'=>$line->product_desc + ); + } + + // Now define invoice + $linesorders[]=array( + 'id' => $order->id, + 'ref' => $order->ref, + 'ref_client' => $order->ref_client, + 'ref_ext' => $order->ref_ext, + 'ref_int' => $order->ref_int, + 'socid' => $order->socid, + 'statut' => $order->statut, + + 'total_ht' => $order->total_ht, + 'total_tva' => $order->total_tva, + 'total_localtax1' => $order->total_localtax1, + 'total_localtax2' => $order->total_localtax2, + 'total_ttc' => $order->total_ttc, + 'fk_project' => $order->fk_project, + + 'date' => $order->date?dol_print_date($order->date,'dayrfc'):'', + 'date_commande' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'', + + 'remise' => $order->remise, + 'remise_percent' => $order->remise_percent, + 'remise_absolue' => $order->remise_absolue, + + 'source' => $order->source, + 'facturee' => $order->facturee, + 'note' => $order->note, + 'note_public' => $order->note_public, + 'cond_reglement_id' => $order->cond_reglement_id, + 'cond_reglement' => $order->cond_reglement, + 'cond_reglement_doc' => $order->cond_reglement_doc, + 'cond_reglement_code' => $order->cond_reglement_code, + 'mode_reglement_id' => $order->mode_reglement_id, + 'mode_reglement' => $order->mode_reglement, + 'mode_reglement_code' => $order->mode_reglement_code, + + 'date_livraison' => $order->date_livraison, + 'fk_delivery_address' => $order->fk_delivery_address, + + 'demand_reason_id' => $order->demand_reason_id, + 'demand_reason_code' => $order->demand_reason_code, + + 'lines' => $linesresp + ); + } + $i++; + } + + $objectresp=array( + 'result'=>array('result_code'=>'OK', 'result_label'=>''), + 'orders'=>$linesorders + + ); + } + else + { + $error++; + $errorcode=$db->lasterrno(); $errorlabel=$db->lasterror(); + } + } + + if ($error) + { + $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel)); + } + + return $objectresp; +} + + +/** + * Create order + * @param array $authentication Array of authentication information + * @param array $order Order info + * @return int Id of new order + */ +function createOrder($authentication,$order) +{ + global $db,$conf,$langs; + + $now=dol_now(); + + dol_syslog("Function: createOrder login=".$authentication['login']." socid :".$order['socid'] ); + + // Init and check authentication + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + if ($authentication['entity']) $conf->entity=$authentication['entity']; + $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel); + + // Check parameters + + + if (! $error) + { + $newobject=new Commande($db); + $newobject->socid=$order['socid']; + $newobject->type=$order['type']; + $newobject->ref_ext=$order['ref_ext']; + $newobject->date=$order['date']; + $newobject->date_lim_reglement=$order['date_due']; + $newobject->note=$order['note']; + $newobject->note_public=$order['note_public']; + $newobject->statut=$order['statut']; + $newobject->facturee=$order['facturee']; + $newobject->fk_project=$order['project_id']; + $newobject->cond_reglement_id=$order['cond_reglement_id']; + $newobject->demand_reason_id=$order['demand_reason_id']; + $newobject->date_commande=$now; + + // Trick because nusoap does not store data with same structure if there is one or several lines + $arrayoflines=array(); + if (isset($order['lines']['line'][0])) $arrayoflines=$order['lines']['line']; + else $arrayoflines=$order['lines']; + + foreach($arrayoflines as $key => $line) + { + // $key can be 'line' or '0','1',... + $newline=new OrderLigne($db); + + $newline->type=$line['type']; + $newline->desc=$line['desc']; + $newline->fk_product=$line['fk_product']; + $newline->tva_tx=$line['vat_rate']; + $newline->qty=$line['qty']; + $newline->subprice=$line['unitprice']; + $newline->total_ht=$line['total_net']; + $newline->total_tva=$line['total_vat']; + $newline->total_ttc=$line['total']; + $newline->fk_product=$line['fk_product']; + $newobject->lines[]=$newline; + } + + + $db->begin(); + + $object_id=$newobject->create($fuser,0,0); + if ($object_id < 0) + { + $error++; + + } + + if (! $error) + { + $db->commit(); + $objectresp=array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$object_id); + } + else + { + $db->rollback(); + $error++; + $errorcode='KO'; + $errorlabel=$newobject->error; + } + } + + if ($error) + { + $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel)); + } + + return $objectresp; +} + + +/** + * Valid an order + * @param array $authentication Array of authentication information + * @param int $id Id of order to validate + * @return array Array result + */ +function validOrder($authentication,$id='') +{ + global $db,$conf,$langs; + + dol_syslog("Function: validOrder login=".$authentication['login']." id=".$id." ref=".$ref." ref_ext=".$ref_ext); + + // Init and check authentication + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + if ($authentication['entity']) $conf->entity=$authentication['entity']; + $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel); + + if (! $error) + { + $fuser->getrights(); + + if ($fuser->rights->commande->lire) + { + $order=new Commande($db); + $result=$order->fetch($id,$ref,$ref_ext); + + $order->fetch_thirdparty(); + $db->begin(); + if ($result > 0) + { + $result=$order->valid($fuser); + + if ($result >= 0) + { + // Define output language + $outputlangs = $langs; + commande_pdf_create($db, $order, $order->modelpdf, $outputlangs, 0, 0, 0); + + } + else + { + $db->rollback(); + $error++; + $errorcode='KO'; + $errorlabel=$newobject->error; + } + } + else + { + $db->rollback(); + $error++; + $errorcode='KO'; + $errorlabel=$newobject->error; + } + + } + else + { + $db->rollback(); + $error++; + $errorcode='KO'; + $errorlabel=$newobject->error; + } + + } + + if ($error) + { + $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel)); + } + else + { + $db->commit(); + $objectresp= array('result'=>array('result_code'=>'OK', 'result_label'=>'')); + } + + return $objectresp; +} + + +// Return the results. +$server->service($HTTP_RAW_POST_DATA); + +?>