diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php
index da4f13e6d53..72c091ff156 100644
--- a/htdocs/fourn/commande/card.php
+++ b/htdocs/fourn/commande/card.php
@@ -43,7 +43,9 @@ if (!empty($conf->produit->enabled))
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
if (!empty($conf->projet->enabled))
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
+require_once NUSOAP_PATH.'/nusoap.php'; // Include SOAP
+$langs->load('admin');
$langs->load('orders');
$langs->load('sendings');
$langs->load('companies');
@@ -1044,6 +1046,91 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
}
}
+if ($action == 'webservice' && GETPOST('mode', 'alpha') == "send" && ! GETPOST('cancel'))
+{
+ $ws_host = GETPOST('ws_host','alpha');
+ $ws_key = GETPOST('ws_key','alpha');
+ $ws_user = GETPOST('ws_user','alpha');
+ $ws_password = GETPOST('ws_password','alpha');
+ $ws_entity = GETPOST('ws_entity','int');
+ $ws_thirdparty = GETPOST('ws_thirdparty','int');
+
+ // NS and Authentication parameters
+ $ws_ns='http://www.dolibarr.org/ns/';
+ $ws_authentication=array(
+ 'dolibarrkey'=>$ws_key,
+ 'sourceapplication'=>'DolibarrWebServiceClient',
+ 'login'=>$ws_user,
+ 'password'=>$ws_password,
+ 'entity'=>$ws_entity
+ );
+
+ //Is everything filled?
+ if ($mode != "init" && (empty($ws_host) || empty($ws_key) || empty($ws_user) || empty($ws_password) || empty($ws_thirdparty))) {
+ setEventMessage($langs->trans("ErrorFieldsRequired"), 'errors');
+ }
+ else
+ {
+ //Create SOAP client and connect it to order
+ $soapclient_order = new nusoap_client($ws_host."/webservices/server_order.php");
+ $soapclient_order->soap_defencoding='UTF-8';
+ $soapclient_order->decodeUTF8(false);
+
+ //Create SOAP client and connect it to product/service
+ $soapclient_product = new nusoap_client($ws_host."/webservices/server_productorservice.php");
+ $soapclient_product->soap_defencoding='UTF-8';
+ $soapclient_product->decodeUTF8(false);
+
+ //Prepare the order lines from order
+ $order_lines = array();
+ foreach ($object->lines as $line)
+ {
+ $ws_parameters = array('authentication' => $ws_authentication, 'id' => '', 'ref' => $line->ref_supplier);
+ $result_product = $soapclient_product->call("getProductOrService", $ws_parameters, $ws_ns, '');
+
+ if ($result_product["result"]["result_code"] == "OK")
+ {
+ $order_lines[] = array(
+ 'desc' => $line->product_desc,
+ 'type' => $line->product_type,
+ 'product_id' => $result_product["product"]["id"],
+ 'vat_rate' => $line->tva_tx,
+ 'qty' => $line->qty,
+ 'price' => $line->price,
+ 'unitprice' => $line->subprice,
+ 'total_net' => $line->total_ht,
+ 'total_vat' => $line->total_tva,
+ 'total' => $line->total_ttc,
+ 'date_start' => $line->date_start,
+ 'date_end' => $line->date_end,
+ );
+ }
+ }
+
+ //Prepare the order header
+ $order = array(
+ 'thirdparty_id' => $ws_thirdparty,
+ 'date' => dol_print_date(dol_now(),'dayrfc'),
+ 'total_net' => $object->total_ht,
+ 'total_var' => $object->total_tva,
+ 'total' => $object->total_ttc,
+ 'lines' => $order_lines
+ );
+
+ $ws_parameters = array('authentication'=>$ws_authentication, 'order' => $order);
+ $result_order = $soapclient_order->call("createOrder", $ws_parameters, $ws_ns, '');
+
+ if ($result_order["result"]["result_code"] != "OK")
+ {
+ setEventMessage($langs->trans("SOAPError").$result_order["result"]["result_code"]."' - '".$result_order["result"]["result_label"]."'", 'errors');
+ }
+ else
+ {
+ setEventMessage($langs->trans("RemoteOrderRef").$result_order["ref"], 'mesgs');
+ }
+ }
+}
+
if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->fournisseur->commande->creer)
{
if ($action == 'addcontact')
@@ -1769,7 +1856,313 @@ elseif (! empty($object->id))
dol_fiche_end();
- if ($action != 'presend')
+ /*
+ * Action presend
+ */
+ if ($action == 'presend')
+ {
+ $ref = dol_sanitizeFileName($object->ref);
+ include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
+ $fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
+ $file=$fileparams['fullname'];
+
+ // Define output language
+ $outputlangs = $langs;
+ $newlang = '';
+ if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
+ $newlang = $_REQUEST['lang_id'];
+ if ($conf->global->MAIN_MULTILANGS && empty($newlang))
+ $newlang = $object->client->default_lang;
+
+ if (!empty($newlang))
+ {
+ $outputlangs = new Translate('', $conf);
+ $outputlangs->setDefaultLang($newlang);
+ $outputlangs->load('commercial');
+ }
+
+ // Build document if it not exists
+ if (! $file || ! is_readable($file))
+ {
+ $result= $object->generateDocument(GETPOST('model')?GETPOST('model'):$object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
+ if ($result <= 0)
+ {
+ dol_print_error($db,$result);
+ exit;
+ }
+ $fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
+ $file=$fileparams['fullname'];
+ }
+
+ print '
';
+
+ print_titre($langs->trans('SendOrderByMail'));
+
+ // Cree l'objet formulaire mail
+ include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
+ $formmail = new FormMail($db);
+ $formmail->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang);
+ $formmail->fromtype = 'user';
+ $formmail->fromid = $user->id;
+ $formmail->fromname = $user->getFullName($langs);
+ $formmail->frommail = $user->email;
+ $formmail->withfrom=1;
+ $liste=array();
+ foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key=>$value) $liste[$key]=$value;
+ $formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
+ $formmail->withtocc=$liste;
+ $formmail->withtoccc=(! empty($conf->global->MAIN_EMAIL_USECCC)?$conf->global->MAIN_EMAIL_USECCC:false);
+ $formmail->withtopic=$outputlangs->trans('SendOrderRef','__ORDERREF__');
+ $formmail->withfile=2;
+ $formmail->withbody=1;
+ $formmail->withdeliveryreceipt=1;
+ $formmail->withcancel=1;
+ // Tableau des substitutions
+ $formmail->substit['__ORDERREF__']=$object->ref;
+ $formmail->substit['__SIGNATURE__']=$user->signature;
+ $formmail->substit['__PERSONALIZED__']='';
+ $formmail->substit['__CONTACTCIVNAME__']='';
+
+ //Find the good contact adress
+ $custcontact='';
+ $contactarr=array();
+ $contactarr=$object->liste_contact(-1,'external');
+
+ if (is_array($contactarr) && count($contactarr)>0) {
+ foreach($contactarr as $contact) {
+ if ($contact['libelle']==$langs->trans('TypeContact_order_supplier_external_BILLING')) {
+ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
+ $contactstatic=new Contact($db);
+ $contactstatic->fetch($contact['id']);
+ $custcontact=$contactstatic->getFullName($langs,1);
+ }
+ }
+
+ if (!empty($custcontact)) {
+ $formmail->substit['__CONTACTCIVNAME__']=$custcontact;
+ }
+ }
+
+ // Tableau des parametres complementaires
+ $formmail->param['action']='send';
+ $formmail->param['models']='order_supplier_send';
+ $formmail->param['orderid']=$object->id;
+ $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id;
+
+ // Init list of files
+ if (GETPOST("mode")=='init')
+ {
+ $formmail->clear_attached_files();
+ $formmail->add_attached_files($file,basename($file),dol_mimetype($file));
+ }
+
+ // Show form
+ print $formmail->get_form();
+
+ print '
';
+ }
+ /*
+ * Action webservice
+ */
+ elseif ($action == 'webservice' && GETPOST('mode', 'alpha') != "send" && ! GETPOST('cancel'))
+ {
+ $mode = GETPOST('mode', 'alpha');
+ $ws_host = GETPOST('ws_host','alpha');
+ $ws_key = GETPOST('ws_key','alpha');
+ $ws_user = GETPOST('ws_user','alpha');
+ $ws_password = GETPOST('ws_password','alpha');
+
+ // NS and Authentication parameters
+ $ws_ns = 'http://www.dolibarr.org/ns/';
+ $ws_authentication = array(
+ 'dolibarrkey'=>$ws_key,
+ 'sourceapplication'=>'DolibarrWebServiceClient',
+ 'login'=>$ws_user,
+ 'password'=>$ws_password,
+ 'entity'=>''
+ );
+
+ print_titre($langs->trans('CreateRemoteOrder'));
+
+ //Is everything filled?
+ if ($mode != "init" && (empty($ws_host) || empty($ws_key) || empty($ws_user) || empty($ws_password))) {
+ setEventMessage($langs->trans("ErrorFieldsRequired"), 'errors');
+ $mode = "init";
+ }
+
+ if ($mode == "init")
+ {
+ //Table/form header
+ print '