';
print '';
diff --git a/htdocs/product/stats/mo.php b/htdocs/product/stats/mo.php
new file mode 100644
index 00000000000..8c7eb34e7e1
--- /dev/null
+++ b/htdocs/product/stats/mo.php
@@ -0,0 +1,235 @@
+
+ * Copyright (C) 2004-2009 Laurent Destailleur
+ * Copyright (C) 2005-2009 Regis Houssin
+ *
+ * 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 3 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/product/stats/mo.php
+ * \ingroup product mo
+ * \brief Page of MO referring product
+ */
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/mrp/class/mo.class.php';
+require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
+
+// Load translation files required by the page
+$langs->loadLangs(array('mrp', 'products', 'companies'));
+
+$id = GETPOST('id', 'int');
+$ref = GETPOST('ref', 'alpha');
+
+// Security check
+$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
+$fieldtype = (!empty($ref) ? 'ref' : 'rowid');
+if ($user->socid) $socid = $user->socid;
+$result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype);
+
+// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
+$hookmanager->initHooks(array('productstatscontract'));
+
+$mesg = '';
+
+// Load variable for pagination
+$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
+$sortfield = GETPOST("sortfield", 'alpha');
+$sortorder = GETPOST("sortorder", 'alpha');
+$page = GETPOST("page", 'int');
+if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
+$offset = $limit * $page;
+$pageprev = $page - 1;
+$pagenext = $page + 1;
+if (!$sortorder) $sortorder = "DESC";
+if (!$sortfield) $sortfield = "c.date_valid";
+
+
+/*
+ * View
+ */
+
+$staticmo = new Mo($db);
+$staticmoligne = new MoLine($db);
+
+$form = new Form($db);
+
+if ($id > 0 || !empty($ref))
+{
+ $product = new Product($db);
+ $result = $product->fetch($id, $ref);
+
+ $object = $product;
+
+ $parameters = array('id'=>$id);
+ $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
+ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
+
+ llxHeader("", "", $langs->trans("CardProduct".$product->type));
+
+ if ($result > 0)
+ {
+ $head = product_prepare_head($product);
+ $titre = $langs->trans("CardProduct".$product->type);
+ $picto = ($product->type == Product::TYPE_SERVICE ? 'service' : 'product');
+ dol_fiche_head($head, 'referers', $titre, -1, $picto);
+
+ $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $product, $action); // Note that $action and $object may have been modified by hook
+ print $hookmanager->resPrint;
+ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
+
+ $linkback = ''.$langs->trans("BackToList").'';
+
+ $shownav = 1;
+ if ($user->socid && !in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav = 0;
+
+ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
+
+ print '