diff --git a/htdocs/webservices/admin/webservices.php b/htdocs/webservices/admin/webservices.php index 76387001dfe..f3a49b805bd 100644 --- a/htdocs/webservices/admin/webservices.php +++ b/htdocs/webservices/admin/webservices.php @@ -114,6 +114,11 @@ if ($conf->facture->enabled) $url=DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php?wsdl'; print img_picto('','object_globe.png').' '.''.$url."
\n"; } +if ($conf->fournisseur->enabled) +{ + $url=DOL_MAIN_URL_ROOT.'/webservices/server_supplier_invoice.php?wsdl'; + print img_picto('','object_globe.png').' '.''.$url."
\n"; +} print '
'; @@ -131,6 +136,11 @@ if ($conf->facture->enabled) $url=DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php'; print img_picto('','object_globe.png').' '.''.$url."
\n"; } +if ($conf->fournisseur->enabled) +{ + $url=DOL_MAIN_URL_ROOT.'/webservices/server_supplier_invoice.php'; + print img_picto('','object_globe.png').' '.''.$url."
\n"; +} print '
'; diff --git a/htdocs/webservices/index.php b/htdocs/webservices/index.php index 4f70a5bacac..971cf3aa03e 100644 --- a/htdocs/webservices/index.php +++ b/htdocs/webservices/index.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2006-2011 Laurent Destailleur * * 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 @@ -64,6 +64,11 @@ if ($conf->facture->enabled) $url=DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php?wsdl'; print img_picto('','object_globe.png').' '.''.$url."
\n"; } +if ($conf->fournisseur->enabled) +{ + $url=DOL_MAIN_URL_ROOT.'/webservices/server_supplier_invoice.php?wsdl'; + print img_picto('','object_globe.png').' '.''.$url."
\n"; +} print '
'; @@ -81,6 +86,11 @@ if ($conf->facture->enabled) $url=DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php'; print img_picto('','object_globe.png').' '.''.$url."
\n"; } +if ($conf->fournisseur->enabled) +{ + $url=DOL_MAIN_URL_ROOT.'/webservices/server_supplier_invoice.php'; + print img_picto('','object_globe.png').' '.''.$url."
\n"; +} print '
'; diff --git a/htdocs/webservices/server_supplier_invoice.php b/htdocs/webservices/server_supplier_invoice.php new file mode 100755 index 00000000000..5786fe0a785 --- /dev/null +++ b/htdocs/webservices/server_supplier_invoice.php @@ -0,0 +1,420 @@ + + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + * \file htdocs/webservices/server_supplier_invoice.php + * \brief File that is entry point to call Dolibarr WebServices + * \version $Id$ + */ + +// 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."/user/class/user.class.php"); +require_once(DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.facture.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'; +$ns='http://www.dolibarr.org/ns/'; +$server->configureWSDL('WebServicesDolibarrSupplierInvoice',$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', + 'element', + 'struct', + 'all', + '', + array( + 'id' => array('name'=>'id','type'=>'xsd:string'), + 'type' => array('name'=>'type','type'=>'xsd:int'), + 'fk_product' => array('name'=>'fk_product','type'=>'xsd:int'), + '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'), + 'vat_rate' => array('name'=>'vat_rate','type'=>'xsd:double'), + 'qty' => array('name'=>'qty','type'=>'xsd:double'), + 'date_start' => array('name'=>'date_start','type'=>'xsd:date'), + 'date_end' => array('name'=>'date_end','type'=>'xsd:date'), + // 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( + 'invoice', + 'element', // If we put element here instead of complexType to have tag called invoice in getInvoicesForThirdParty we brek getInvoice + 'struct', + 'all', + '', + array( + 'id' => array('name'=>'id','type'=>'xsd:string'), + 'ref' => array('name'=>'ref','type'=>'xsd:string'), + 'ref_ext' => array('name'=>'ref_ext','type'=>'xsd:string'), + 'fk_user_author' => array('name'=>'fk_user_author','type'=>'xsd:string'), + 'fk_user_valid' => array('name'=>'fk_user_valid','type'=>'xsd:string'), + 'date' => array('name'=>'date','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'), + 'type' => array('name'=>'type','type'=>'xsd:int'), + 'total_net' => array('name'=>'type','type'=>'xsd:double'), + 'total_vat' => array('name'=>'type','type'=>'xsd:double'), + 'total' => array('name'=>'type','type'=>'xsd:double'), + 'note' => array('name'=>'note','type'=>'xsd:string'), + 'note_public' => array('name'=>'note_public','type'=>'xsd:string'), + 'status' => array('name'=>'status','type'=>'xsd:int'), + 'close_code' => array('name'=>'close_code','type'=>'xsd:string'), + 'close_note' => array('name'=>'close_note','type'=>'xsd:string'), + 'lines' => array('name'=>'lines','type'=>'tns:LinesArray') + ) +); + +$server->wsdl->addComplexType( + 'InvoicesArray', + 'complexType', + 'array', + '', + 'SOAP-ENC:Array', + array(), + array( + array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:invoice[]') + ), + 'tns:invoice' +); + +$server->wsdl->addComplexType( + 'invoices', + 'complexType', + 'array', + '', + 'SOAP-ENC:Array', + array(), + array( + array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:invoice[]') + ), + 'tns:invoice' +); + +$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'), + )); + + +// Register WSDL +$server->register('getSupplierInvoice', +// Entry values +array('authentication'=>'tns:authentication','id'=>'xsd:string','ref'=>'xsd:string','ref_ext'=>'xsd:string'), +// Exit values +array('result'=>'tns:result','invoice'=>'tns:invoice'), +$ns +); +$server->register('getSupplierInvoicesForThirdParty', +// Entry values +array('authentication'=>'tns:authentication','idthirdparty'=>'xsd:string'), +// Exit values +array('result'=>'tns:result','invoices'=>'tns:invoices'), +$ns +); + + +/** + * Get invoice from id, ref or ref_ext + */ +function getSupplierInvoice($authentication,$id,$ref,$ref_ext) +{ + global $db,$conf,$langs; + + dol_syslog("Function: getSupplierInvoice login=".$authentication['login']." id=".$id." ref=".$ref." ref_ext=".$ref_ext); + + if ($authentication['entity']) $conf->entity=$authentication['entity']; + + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + + if (! $error && empty($conf->global->WEBSERVICES_KEY)) + { + $error++; + $errorcode='SETUP_NOT_COMPLETE'; $errorlabel='Value for dolibarr security key not yet defined into Webservice module setup'; + } + if (! $error && ($authentication['dolibarrkey'] != $conf->global->WEBSERVICES_KEY)) + { + $error++; + $errorcode='BAD_VALUE_FOR_SECURITY_KEY'; $errorlabel='Value provided into dolibarrkey entry field does not match security key defined in Webservice module setup'; + } + if (! $error && ! empty($authentication['entity']) && ! is_numeric($authentication['entity'])) + { + $error++; + $errorcode='BAD_PARAMETERS'; $errorlabel="Parameter entity must be empty (or a numeric with id of instance if multicompany module is used)."; + } + + 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=new User($db); + $result=$fuser->fetch('',$authentication['login'],'',0); + if ($result <= 0) $error++; + + // TODO Check password + + + + if ($error) + { + $errorcode='BAD_CREDENTIALS'; $errorlabel='Bad value for login or password'; + } + } + + if (! $error) + { + $fuser->getrights(); + + if ($fuser->rights->fournisseur->facture->lire) + { + $invoice=new FactureFournisseur($db); + $result=$invoice->fetch($id,$ref,$ref_ext); + if ($result > 0) + { + $linesresp=array(); + $i=0; + foreach($invoice->lines as $line) + { + //var_dump($line); exit; + $linesresp[]=array( + 'id'=>$line->rowid, + 'type'=>$line->product_type, + 'total_net'=>$line->total_ht, + 'total_vat'=>$line->total_tva, + 'total'=>$line->total_ttc, + 'vat_rate'=>$line->tva_tx, + 'qty'=>$line->qty + ); + $i++; + } + + // Create invoice + $objectresp = array( + 'result'=>array('result_code'=>'OK', 'result_label'=>''), + 'invoice'=>array( + 'id' => $invoice->id, + 'ref' => $invoice->ref, + 'ref_ext' => $invoice->ref_ext, + 'status'=>$invoice->statut, + 'fk_user_author' => $invoice->fk_user_author, + 'fk_user_valid' => $invoice->fk_user_valid, + 'lines' => $linesresp +// 'lines' => array('0'=>array('id'=>222,'type'=>1), +// '1'=>array('id'=>333,'type'=>1)) + + )); + } + 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 invoices for third party + */ +function getSupplierInvoicesForThirdParty($authentication,$idthirdparty) +{ + global $db,$conf,$langs; + + dol_syslog("Function: getSupplierInvoicesForThirdParty login=".$authentication['login']." idthirdparty=".$idthirdparty); + + if ($authentication['entity']) $conf->entity=$authentication['entity']; + + $objectresp=array(); + $errorcode='';$errorlabel=''; + $error=0; + + if (! $error && ($authentication['dolibarrkey'] != $conf->global->WEBSERVICES_KEY)) + { + $error++; + $errorcode='BAD_VALUE_FOR_SECURITY_KEY'; $errorlabel='Value provided into dolibarrkey entry field does not match security key defined in Webservice module setup'; + } + + if (! $error && empty($idthirdparty)) + { + $error++; + $errorcode='BAD_PARAMETERS'; $errorlabel='Parameter id is not provided'; + } + + if (! $error) + { + $linesinvoice=array(); + + $sql.='SELECT f.rowid as facid, facnumber as ref, ref_ext, type, fk_statut as status, total_ttc, total, tva'; + $sql.=' FROM '.MAIN_DB_PREFIX.'facture_fourn as f'; + //$sql.=', '.MAIN_DB_PREFIX.'societe as s'; + //$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; + + $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); + + $invoice=new FactureFournisseur($db); + $invoice->fetch($obj->facid); + + // Define lines of invoice + $linesresp=array(); + foreach($invoice->lines as $line) + { + $linesresp[]=array( + 'id'=>$line->rowid, + 'type'=>$line->product_type, + 'total_net'=>$line->total_ht, + 'total_vat'=>$line->total_tva, + 'total'=>$line->total_ttc, + 'vat_rate'=>$line->tva_tx, + 'qty'=>$line->qty, + 'product_ref'=>$line->product_ref, + 'product_label'=>$line->product_label, + 'product_desc'=>$line->product_desc, + ); + } + + // Now define invoice + $linesinvoice[]=array( + 'id'=>$invoice->id, + 'ref'=>$invoice->ref, + 'ref_ext'=>$invoice->ref_ext, + 'type'=>$invoice->type, + 'status'=>$invoice->statut, + 'total_net'=>$invoice->total_ht, + 'total_vat'=>$invoice->total_tva, + 'total'=>$invoice->total_ttc, + 'lines' => $linesresp + ); + + $i++; + } + + $objectresp=array( + 'result'=>array('result_code'=>'OK', 'result_label'=>''), + 'invoices'=>$linesinvoice + + ); + } + else + { + $error++; + $errorcode=$db->lasterrno(); $errorlabel=$db->lasterror(); + } + } + + if ($error) + { + $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel)); + } + + return $objectresp; +} + + +// Return the results. +$server->service($HTTP_RAW_POST_DATA); + +?>