multicurrency.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. <?php
  2. /* <one line to give the program's name and a brief idea of what it does.>
  3. * Copyright (C) 2015 ATM Consulting <support@atm-consulting.fr>
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /**
  19. * \file admin/multicurrency.php
  20. * \ingroup multicurrency
  21. * \brief Page to setup multicurrency module
  22. */
  23. // Dolibarr environment
  24. require '../main.inc.php';
  25. require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
  26. require_once DOL_DOCUMENT_ROOT.'/core/lib/multicurrency.lib.php';
  27. require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
  28. // Load translation files required by the page
  29. $langs->loadLangs(array('admin', 'multicurrency'));
  30. // Access control
  31. if (! $user->admin) {
  32. accessforbidden();
  33. }
  34. // Parameters
  35. $action = GETPOST('action', 'alpha');
  36. /*
  37. * Actions
  38. */
  39. if (preg_match('/set_([a-z0-9_\-]+)/i',$action,$reg))
  40. {
  41. $code=$reg[1];
  42. $value=(GETPOST($code, 'alpha') ? GETPOST($code, 'alpha') : 1);
  43. if (dolibarr_set_const($db, $code, $value, 'chaine', 0, '', $conf->entity) > 0)
  44. {
  45. header("Location: ".$_SERVER["PHP_SELF"]);
  46. exit;
  47. }
  48. else
  49. {
  50. dol_print_error($db);
  51. }
  52. }
  53. if (preg_match('/del_([a-z0-9_\-]+)/i',$action,$reg))
  54. {
  55. $code=$reg[1];
  56. if (dolibarr_del_const($db, $code, 0) > 0)
  57. {
  58. header("Location: ".$_SERVER["PHP_SELF"]);
  59. exit;
  60. }
  61. else
  62. {
  63. dol_print_error($db);
  64. }
  65. }
  66. if ($action == 'add_currency')
  67. {
  68. $error=0;
  69. $langs->loadCacheCurrencies('');
  70. $code = GETPOST('code', 'alpha');
  71. $rate = price2num(GETPOST('rate', 'alpha'));
  72. $currency = new MultiCurrency($db);
  73. $currency->code = $code;
  74. $currency->name = !empty($langs->cache_currencies[$code]['label']) ? $langs->cache_currencies[$code]['label'].' ('.$langs->getCurrencySymbol($code).')' : $code;
  75. if (empty($rate))
  76. {
  77. setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Rate")), null, 'errors');
  78. $error++;
  79. }
  80. if (! $error)
  81. {
  82. if ($currency->create($user) > 0)
  83. {
  84. if ($currency->addRate($rate)) setEventMessages($langs->trans('RecordSaved'), array());
  85. else setEventMessages($langs->trans('ErrorAddRateFail'), array(), 'errors');
  86. }
  87. else setEventMessages($langs->trans('ErrorAddCurrencyFail'), $currency->errors, 'errors');
  88. }
  89. }
  90. elseif ($action == 'update_currency')
  91. {
  92. $error = 0;
  93. $submit = GETPOST('submit', 'alpha');
  94. if ($submit == $langs->trans('Modify'))
  95. {
  96. $fk_multicurrency = GETPOST('fk_multicurrency', 'int');
  97. $rate = price2num(GETPOST('rate', 'alpha'));
  98. $currency = new MultiCurrency($db);
  99. if (empty($rate))
  100. {
  101. setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Rate")), null, 'errors');
  102. $error++;
  103. }
  104. if (! $error)
  105. {
  106. if ($currency->fetch($fk_multicurrency) > 0)
  107. {
  108. $currency->updateRate($rate);
  109. }
  110. }
  111. }
  112. elseif ($submit == $langs->trans('Delete'))
  113. {
  114. $fk_multicurrency = GETPOST('fk_multicurrency', 'int');
  115. $currency = new MultiCurrency($db);
  116. if ($currency->fetch($fk_multicurrency) > 0)
  117. {
  118. if ($currency->delete() > 0) setEventMessages($langs->trans('RecordDeleted'), array());
  119. else setEventMessages($langs->trans('ErrorDeleteCurrencyFail'), array(), 'errors');
  120. }
  121. }
  122. }
  123. elseif ($action == 'synchronize')
  124. {
  125. MultiCurrency::syncRates($conf->global->MULTICURRENCY_APP_ID);
  126. }
  127. $TCurrency = array();
  128. $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'multicurrency WHERE entity = '.$conf->entity;
  129. $resql = $db->query($sql);
  130. if ($resql)
  131. {
  132. while ($obj = $db->fetch_object($resql))
  133. {
  134. $currency = new MultiCurrency($db);
  135. $currency->fetch($obj->rowid);
  136. $TCurrency[] = $currency;
  137. }
  138. }
  139. /*
  140. * View
  141. */
  142. $form=new Form($db);
  143. $page_name = "MultiCurrencySetup";
  144. llxHeader('', $langs->trans($page_name));
  145. // Subheader
  146. $linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs->trans("BackToModuleList") . '</a>';
  147. print load_fiche_titre($langs->trans($page_name), $linkback);
  148. // Configuration header
  149. $head = multicurrencyAdminPrepareHead();
  150. dol_fiche_head($head, 'settings', $langs->trans("ModuleSetup"), -1, "multicurrency");
  151. print '<table class="noborder" width="100%">';
  152. print '<tr class="liste_titre">';
  153. print '<td>'.$langs->trans("Parameters").'</td>'."\n";
  154. print '<td align="center">'.$langs->trans("Value").'</td>'."\n";
  155. print '</tr>';
  156. print '<tr class="oddeven">';
  157. print '<td>'.$langs->transnoentitiesnoconv("MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE").'</td>';
  158. print '<td align="right">';
  159. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  160. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  161. print '<input type="hidden" name="action" value="set_MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE">';
  162. print $form->selectyesno("MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE",$conf->global->MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE,1);
  163. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  164. print '</form>';
  165. print '</td></tr>';
  166. print '<tr class="oddeven">';
  167. print '<td>'.$langs->transnoentitiesnoconv("multicurrency_useOriginTx").'</td>';
  168. print '<td align="right">';
  169. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  170. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  171. print '<input type="hidden" name="action" value="set_MULTICURRENCY_USE_ORIGIN_TX">';
  172. print $form->selectyesno("MULTICURRENCY_USE_ORIGIN_TX",$conf->global->MULTICURRENCY_USE_ORIGIN_TX,1);
  173. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  174. print '</form>';
  175. print '</td></tr>';
  176. /* TODO uncomment when the functionality will integrated
  177. print '<tr class="oddeven">';
  178. print '<td>'.$langs->transnoentitiesnoconv("multicurrency_buyPriceInCurrency").'</td>';
  179. print '<td align="right">';
  180. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  181. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  182. print '<input type="hidden" name="action" value="set_MULTICURRENCY_BUY_PRICE_IN_CURRENCY">';
  183. print $form->selectyesno("MULTICURRENCY_BUY_PRICE_IN_CURRENCY",$conf->global->MULTICURRENCY_BUY_PRICE_IN_CURRENCY,1);
  184. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  185. print '</form>';
  186. print '</td></tr>';
  187. */
  188. /* TODO uncomment when the functionality will integrated
  189. print '<tr class="oddeven">';
  190. print '<td>'.$langs->transnoentitiesnoconv("multicurrency_modifyRateApplication").'</td>';
  191. print '<td align="right">';
  192. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  193. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  194. print '<input type="hidden" name="action" value="set_MULTICURRENCY_MODIFY_RATE_APPLICATION">';
  195. print $form->selectarray('MULTICURRENCY_MODIFY_RATE_APPLICATION', array('PU_DOLIBARR' => 'PU_DOLIBARR', 'PU_CURRENCY' => 'PU_CURRENCY'), $conf->global->MULTICURRENCY_MODIFY_RATE_APPLICATION);
  196. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  197. print '</form>';
  198. print '</td></tr>';
  199. */
  200. print '</table>';
  201. print '<br>';
  202. if (!empty($conf->global->MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION))
  203. {
  204. print '<div class="div-table-responsive-no-min">';
  205. print '<table class="noborder" width="100%">';
  206. print '<tr class="liste_titre">';
  207. print '<td>'.$form->textwithpicto($langs->trans("CurrencyLayerAccount"), $langs->trans("CurrencyLayerAccount_help_to_synchronize")).'</td>'."\n";
  208. print '<td align="right">';
  209. print '<form id="form_sync" action="" method="POST">';
  210. print '<input type="hidden" name="action" value="synchronize" />';
  211. print '<textarea id="response" class="hideobject" name="response"></textarea>';
  212. print $langs->trans("Value").'&nbsp;<input type="button" id="bt_sync" class="button" onclick="javascript:getRates();" value="'.$langs->trans('Synchronize').'" />';
  213. print '</form>';
  214. print '</td></tr>';
  215. print '<tr class="oddeven">';
  216. print '<td><a target="_blank" href="https://currencylayer.com">'.$langs->transnoentitiesnoconv("multicurrency_appId").'</a></td>';
  217. print '<td align="right">';
  218. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  219. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  220. print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_ID">';
  221. print '<input type="text" name="MULTICURRENCY_APP_ID" value="'.$conf->global->MULTICURRENCY_APP_ID.'" size="28" />&nbsp;';
  222. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  223. print '</form>';
  224. print '</td></tr>';
  225. print '<tr class="oddeven">';
  226. print '<td>'.$langs->transnoentitiesnoconv("multicurrency_appCurrencySource").'</td>';
  227. print '<td align="right">';
  228. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  229. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  230. print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_SOURCE">';
  231. print '<input type="text" name="MULTICURRENCY_APP_SOURCE" value="'.$conf->global->MULTICURRENCY_APP_SOURCE.'" size="10" placeholder="USD" />&nbsp;'; // Default: USD
  232. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  233. print '</form>';
  234. print '</td></tr>';
  235. print '<tr class="oddeven">';
  236. print '<td>'.$langs->transnoentitiesnoconv("multicurrency_alternateCurrencySource").'</td>';
  237. print '<td align="right">';
  238. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  239. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  240. print '<input type="hidden" name="action" value="set_MULTICURRENCY_ALTERNATE_SOURCE">';
  241. print '<input type="text" name="MULTICURRENCY_ALTERNATE_SOURCE" value="'.$conf->global->MULTICURRENCY_ALTERNATE_SOURCE.'" size="10" placeholder="EUR" />&nbsp;'; // Example: EUR
  242. print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
  243. print '</form>';
  244. print '</td></tr>';
  245. print '</table>';
  246. print '</div>';
  247. print '<br>';
  248. }
  249. print '<div class="div-table-responsive-no-min">';
  250. print '<table class="noborder" width="100%">';
  251. print '<tr class="liste_titre">';
  252. print '<td>'.$form->textwithpicto($langs->trans("CurrenciesUsed"), $langs->transnoentitiesnoconv("CurrenciesUsed_help_to_add")).'</td>'."\n";
  253. print '<td align="center">'.$langs->trans("Rate").'</td>'."\n";
  254. print '</tr>';
  255. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  256. print '<tr class="oddeven">';
  257. print '<td>'.$form->selectCurrency('', 'code').'</td>';
  258. print '<td align="right">';
  259. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  260. print '<input type="hidden" name="action" value="add_currency">';
  261. print '<input type="text" name="rate" value="" size="13" placeholder="'.$langs->trans('Rate').'" />&nbsp;';
  262. print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
  263. print '</td>';
  264. print '</tr>';
  265. print '</form>';
  266. print '<tr class="oddeven">';
  267. print '<td>'.$conf->currency.$form->textwithpicto(' ', $langs->trans("BaseCurrency")).'</td>';
  268. print '<td align="right">1</td>';
  269. print '</tr>';
  270. foreach ($TCurrency as &$currency)
  271. {
  272. if ($currency->code == $conf->currency) continue;
  273. print '<tr class="oddeven">';
  274. print '<td>'.$currency->code.' - '.$currency->name.'</td>';
  275. print '<td align="right">';
  276. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  277. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  278. print '<input type="hidden" name="action" value="update_currency">';
  279. print '<input type="hidden" name="fk_multicurrency" value="'.$currency->id.'">';
  280. print '1 '.$conf->currency.' = ';
  281. print '<input type="text" name="rate" value="'.($currency->rate->rate ? $currency->rate->rate : '').'" size="13" />&nbsp;'.$currency->code.'&nbsp;';
  282. print '<input type="submit" name="submit" class="button" value="'.$langs->trans("Modify").'">&nbsp;';
  283. print '<input type="submit" name="submit" class="button" value="'.$langs->trans("Delete").'">';
  284. print '</form>';
  285. print '</td></tr>';
  286. }
  287. print '</table>';
  288. print '</div>';
  289. print '
  290. <script type="text/javascript">
  291. function getRates()
  292. {
  293. $("#bt_sync").attr("disabled", true);
  294. var url_sync = "http://apilayer.net/api/live?access_key='.$conf->global->MULTICURRENCY_APP_ID.'&format=1'.(!empty($conf->global->MULTICURRENCY_APP_SOURCE) ? '&source='.$conf->global->MULTICURRENCY_APP_SOURCE : '').'";
  295. $.ajax({
  296. url: url_sync,
  297. dataType: "jsonp"
  298. }).done(function(response) {
  299. $("#response").val(JSON.stringify(response));
  300. $("#form_sync").submit();
  301. });
  302. }
  303. </script>
  304. ';
  305. // End of page
  306. llxFooter();
  307. $db->close();