Fix: Bad format of WSDL for orders. Miscellaneous fixes into WS.

This commit is contained in:
Laurent Destailleur 2013-03-12 15:25:58 +01:00
parent fc3483a4bb
commit 484c39435c
2 changed files with 110 additions and 93 deletions

View File

@ -67,7 +67,7 @@ $server->wsdl->addComplexType(
'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'),
'entity' => array('name'=>'entity','type'=>'xsd:string')
)
);
// Define WSDL Return object
@ -377,7 +377,10 @@ function getInvoicesForThirdParty($authentication,$idthirdparty)
$errorcode='';$errorlabel='';
$error=0;
$fuser=check_authentication($authentication,$error,$errorcode,$errorlabel);
// Check parameters
if ($fuser->societe_id) $socid=$fuser->societe_id;
// Check parameters
if (! $error && empty($idthirdparty))
{
$error++;
@ -394,9 +397,9 @@ function getInvoicesForThirdParty($authentication,$idthirdparty)
//$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
//$sql.=" WHERE f.fk_soc = s.rowid AND nom = '".$db->escape($idthirdparty)."'";
//$sql.=" WHERE f.fk_soc = s.rowid AND nom = '".$db->escape($idthirdparty)."'";
$sql.=" WHERE f.fk_soc = ".$db->escape($idthirdparty);
$sql.=" AND f.entity = ".$conf->entity;
$sql.=" WHERE f.entity = ".$conf->entity;
if ($idthirdparty != 'all' ) $sql.=" AND f.fk_soc = ".$db->escape($idthirdparty);
$resql=$db->query($sql);
if ($resql)
{
@ -410,6 +413,13 @@ function getInvoicesForThirdParty($authentication,$idthirdparty)
$invoice=new Facture($db);
$invoice->fetch($obj->facid);
// 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';
}
// Define lines of invoice
$linesresp=array();
foreach($invoice->lines as $line)

View File

@ -35,6 +35,8 @@ require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
dol_syslog("Call Dolibarr webservices interfaces");
$langs->load("main");
// Enable and test if module web services is enabled
if (empty($conf->global->MAIN_MODULE_WEBSERVICES))
{
@ -54,7 +56,7 @@ $server->configureWSDL('WebServicesDolibarrOrder',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
// Define WSDL content
// Define WSDL Authentication object
$server->wsdl->addComplexType(
'authentication',
'complexType',
@ -69,7 +71,20 @@ $server->wsdl->addComplexType(
'entity' => array('name'=>'entity','type'=>'xsd:string')
)
);
// Define WSDL Return object
$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'),
)
);
// Define other specific objects
$server->wsdl->addComplexType(
'line',
'complexType',
@ -78,34 +93,34 @@ $server->wsdl->addComplexType(
'',
array(
'id' => array('name'=>'id','type'=>'xsd:string'),
'type' => array('name'=>'type','type'=>'xsd:int'),
'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'),
'qty' => array('name'=>'qty','type'=>'xsd:double'),
'price' => array('name'=>'price','type'=>'xsd:double'),
'subprice' => array('name'=>'subprice','type'=>'xsd:double'),
'tva_tx' => array('name'=>'tva_tx','type'=>'xsd:double'),
'unitprice' => array('name'=>'unitprice','type'=>'xsd:double'),
'vat_rate' => array('name'=>'vat_rate','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'),
'total_net' => array('name'=>'total_net','type'=>'xsd:double'),
'total_vat' => array('name'=>'total_vat','type'=>'xsd:double'),
'total' => array('name'=>'total','type'=>'xsd:double'),
'date_start' => array('name'=>'date_start','type'=>'xsd:string'),
'date_end' => array('name'=>'date_end','type'=>'xsd:string'),
'date_start' => array('name'=>'date_start','type'=>'xsd:date'),
'date_end' => array('name'=>'date_end','type'=>'xsd:date'),
// From product
'product_id' => array('name'=>'product_id','type'=>'xsd:int'),
'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(
/*$server->wsdl->addComplexType(
'LinesArray',
'complexType',
'array',
@ -119,8 +134,7 @@ $server->wsdl->addComplexType(
)
),
'tns:line'
);
);*/
$server->wsdl->addComplexType(
'LinesArray2',
'complexType',
@ -149,23 +163,25 @@ $server->wsdl->addComplexType(
'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'),
'thirdparty_id' => array('name'=>'thirdparty_id','type'=>'xsd:int'),
'status' => array('name'=>'status','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_net' => array('name'=>'total_net','type'=>'xsd:double'),
'total_vat' => array('name'=>'total_vat','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'),
'total' => array('name'=>'total','type'=>'xsd:double'),
'date' => array('name'=>'date','type'=>'xsd:date'),
'date_commande' => array('name'=>'date_commande','type'=>'xsd:date'),
'date_creation' => array('name'=>'date_creation','type'=>'xsd:dateTime'),
'date_validation' => array('name'=>'date_validation','type'=>'xsd:dateTime'),
'date_modification' => array('name'=>'date_modification','type'=>'xsd:dateTime'),
'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'),
'project_id' => array('name'=>'project_id','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'),
@ -179,10 +195,10 @@ $server->wsdl->addComplexType(
'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')
'lines' => array('name'=>'lines','type'=>'tns:LinesArray2')
)
);
/*
$server->wsdl->addComplexType(
'OrdersArray',
'complexType',
@ -197,8 +213,7 @@ $server->wsdl->addComplexType(
)
),
'tns:order'
);
);*/
$server->wsdl->addComplexType(
'OrdersArray2',
'complexType',
@ -207,32 +222,14 @@ $server->wsdl->addComplexType(
'',
array(
'order' => array(
'name' => 'invoice',
'type' => 'tns:invoice',
'name' => 'order',
'type' => 'tns:order',
'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
@ -268,7 +265,7 @@ $server->register(
$server->register(
'createOrder',
array('authentication'=>'tns:authentication','order'=>'tns:order'), // Entry values
array('result'=>'tns:result','id'=>'xsd:string'), // Exit values
array('result'=>'tns:result','id'=>'xsd:string','ref'=>'xsd:string'), // Exit values
$ns,
$ns.'#createOrder',
$styledoc,
@ -355,14 +352,14 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
'qty'=>$line->qty,
'price'=>$line->price,
'subprice'=>$line->subprice,
'tva_tx'=>$line->tva_tx,
'vat_rate'=>$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,
'total_net'=>$line->total_ht,
'total_vat'=>$line->total_tva,
'total'=>$line->total_ttc,
'date_start'=>$line->date_start,
'date_end'=>$line->date_end,
'product_ref'=>$line->product_ref,
@ -381,19 +378,21 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
'ref_client' => $order->ref_client,
'ref_ext' => $order->ref_ext,
'ref_int' => $order->ref_int,
'socid' => $order->socid,
'statut' => $order->statut,
'thirdparty_id' => $order->socid,
'status' => $order->statut,
'total_ht' => $order->total_ht,
'total_tva' => $order->total_tva,
'total_net' => $order->total_ht,
'total_vat' => $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'):'',
'total' => $order->total_ttc,
'project_id' => $order->fk_project,
'date' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'',
'date_creation' => $invoice->date_creation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
'date_validation' => $invoice->date_validation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
'date_modification' => $invoice->datem?dol_print_date($invoice->datem,'dayhourrfc'):'',
'remise' => $order->remise,
'remise_percent' => $order->remise_percent,
'remise_absolue' => $order->remise_absolue,
@ -403,13 +402,12 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
'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,
'cond_reglement' => $order->cond_reglement,
'mode_reglement_id' => $order->mode_reglement_id,
'mode_reglement' => $order->mode_reglement,
'mode_reglement_code' => $order->mode_reglement_code,
'mode_reglement' => $order->mode_reglement,
'date_livraison' => $order->date_livraison,
'fk_delivery_address' => $order->fk_delivery_address,
@ -466,7 +464,7 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
if ($fuser->societe_id) $socid=$fuser->societe_id;
// Check parameters
if (! $error && !$idthirdparty)
if (! $error && empty($idthirdparty))
{
$error++;
$errorcode='BAD_PARAMETERS'; $errorlabel='Parameter id is not provided';
@ -499,7 +497,7 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
if( $socid && ( $socid != $order->socid) )
{
$error++;
$errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.'User does not have permission for this request';
$errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.' User does not have permission for this request';
}
if(!$error)
@ -511,6 +509,7 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
{
$linesresp[]=array(
'id'=>$line->rowid,
'type'=>$line->product_type,
'fk_commande'=>$line->fk_commande,
'fk_parent_line'=>$line->fk_parent_line,
'desc'=>$line->desc,
@ -520,13 +519,12 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
'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,
'total_net'=>$line->total_ht,
'total_vat'=>$line->total_tva,
'total'=>$line->total_ttc,
'date_start'=>$line->date_start,
'date_end'=>$line->date_end,
'product_id'=>$line->fk_product,
'product_ref'=>$line->product_ref,
'product_label'=>$line->product_label,
'product_desc'=>$line->product_desc
@ -541,17 +539,16 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
'ref_ext' => $order->ref_ext,
'ref_int' => $order->ref_int,
'socid' => $order->socid,
'statut' => $order->statut,
'status' => $order->statut,
'total_ht' => $order->total_ht,
'total_tva' => $order->total_tva,
'total_net' => $order->total_ht,
'total_vat' => $order->total_tva,
'total_localtax1' => $order->total_localtax1,
'total_localtax2' => $order->total_localtax2,
'total_ttc' => $order->total_ttc,
'fk_project' => $order->fk_project,
'total' => $order->total_ttc,
'project_id' => $order->fk_project,
'date' => $order->date?dol_print_date($order->date,'dayrfc'):'',
'date_commande' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'',
'date' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'',
'remise' => $order->remise,
'remise_percent' => $order->remise_percent,
@ -570,7 +567,6 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
'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,
@ -618,11 +614,12 @@ function createOrder($authentication,$order)
dol_syslog("Function: createOrder login=".$authentication['login']." socid :".$order['socid']);
if ($authentication['entity']) $conf->entity=$authentication['entity'];
// 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
@ -631,19 +628,19 @@ function createOrder($authentication,$order)
if (! $error)
{
$newobject=new Commande($db);
$newobject->socid=$order['socid'];
$newobject->socid=$order['thirdparty_id'];
$newobject->type=$order['type'];
$newobject->ref_ext=$order['ref_ext'];
$newobject->date=$order['date'];
$newobject->date_lim_reglement=$order['date_due'];
$newobject->date=dol_stringtotime($order['date'],'dayrfc');
$newobject->date_lim_reglement=dol_stringtotime($order['date_due'],'dayrfc');
$newobject->note=$order['note'];
$newobject->note_public=$order['note_public'];
$newobject->statut=$order['statut'];
$newobject->statut=$order['status'];
$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;
$newobject->date_creation=$now;
// Trick because nusoap does not store data with same structure if there is one or several lines
$arrayoflines=array();
@ -670,17 +667,26 @@ function createOrder($authentication,$order)
$db->begin();
$object_id=$newobject->create($fuser,0,0);
if ($object_id < 0)
$result=$newobject->create($fuser,0,0);
if ($result < 0)
{
$error++;
}
if ($newobject->statut == 1) // We want order validated
{
$result=$newobject->validate($fuser);
if ($result < 0)
{
$error++;
}
}
if (! $error)
{
$db->commit();
$objectresp=array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$object_id);
$objectresp=array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$newobject->id,'ref'=>$newobject->ref);
}
else
{
@ -689,6 +695,7 @@ function createOrder($authentication,$order)
$errorcode='KO';
$errorlabel=$newobject->error;
}
}
if ($error)
@ -784,6 +791,6 @@ function validOrder($authentication,$id='')
// Return the results.
$server->service($HTTP_RAW_POST_DATA);
$server->service((isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA:''));
?>