set double authentication : create, send link, usable with FreeOTP (opensource) AEgis (opensource) and Google Authenticator 1. OTP : prevent direct access without going throught the 2FA mechanism 2. Go back to the url where you were disconnected 3. Cosmetic
732 lines
25 KiB
PHP
732 lines
25 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of NOALYSS.
|
|
*
|
|
* NOALYSS 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.
|
|
*
|
|
* NOALYSS 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 NOALYSS; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
// Copyright Author Dany De Bontridder danydb@aevalys.eu
|
|
|
|
/**
|
|
* \file
|
|
* \brief this file respond to an ajax request
|
|
* The parameters are
|
|
* - gDossier
|
|
* - $op operation the file has to execute
|
|
* Part 1
|
|
* dsp_tva fill a ipopup with a choice of possible VAT
|
|
* - if code is set then fill the field code
|
|
* - if compute is set then add event to call clean_tva and compute_ledger
|
|
@see Acc_Ledger_Sale::input
|
|
* Part 2
|
|
* dl : display form to modify, add and delete lettering for a given operation
|
|
*
|
|
*/
|
|
if ( ! defined('ALLOWED')) define ('ALLOWED',1);
|
|
require_once '../include/constant.php';
|
|
|
|
require_once NOALYSS_INCLUDE."/lib/ac_common.php";
|
|
|
|
global $http;
|
|
$http=new HttpInput();
|
|
try {
|
|
$op= $http->request("op");
|
|
if ($op =='check_vatnumber') session_write_close();
|
|
|
|
} catch (\Exception $e) {
|
|
exit();
|
|
}
|
|
|
|
/* we ask a dg box for disconnecting */
|
|
if ($http->request('op',"string","") == 'disconnect') {
|
|
ajax_disconnected("reconnect_bx");
|
|
return ;
|
|
}
|
|
|
|
/**
|
|
* if not connected, session is expired then exit with a message NOCONX
|
|
*/
|
|
if ( ! isset($_SESSION[SESSION_KEY."g_user"])) {
|
|
echo "NOCONX";
|
|
die();
|
|
}
|
|
|
|
mb_internal_encoding("UTF-8");
|
|
|
|
// If not connected to a folder
|
|
if ( ! isset($_REQUEST['gDossier'])) {
|
|
$gDossier=0;
|
|
}
|
|
|
|
|
|
|
|
extract($_REQUEST, EXTR_SKIP );
|
|
|
|
global $g_user, $cn, $g_parameter;
|
|
//
|
|
// If database id == 0 then we are not connected to a folder
|
|
// but to the administration
|
|
//
|
|
if ($gDossier<>0) {
|
|
$cn =Dossier::connect();
|
|
$g_parameter=new Noalyss_Parameter_Folder($cn);
|
|
$g_user = new Noalyss_user($cn);
|
|
$g_user->check(true);
|
|
if ( $g_user->check_dossier($gDossier, true) == 'X' ) {
|
|
die(_('Non autorisé'));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// connect to repository
|
|
$cn=new Database();
|
|
$g_user = new Noalyss_user($cn);
|
|
$g_user->check(true);
|
|
}
|
|
/**
|
|
* check if 2FA is completed
|
|
*/
|
|
if ( ! $g_user->is_double_identified()) {
|
|
exit();
|
|
}
|
|
IDate::set_firstDate($g_user->get_first_week_day());
|
|
ITva_Popup::set_vat_code($g_user->get_vat_code_preference());
|
|
|
|
// For progress bar, for saving time , we check and answer directly
|
|
if ($op == "progressBar") {
|
|
$task_id=$http->request("task_id");
|
|
$task=new Progress_Bar($task_id);
|
|
$task->answer();
|
|
return;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------
|
|
// check password
|
|
//-------------------------------------------------------------------------------------------
|
|
if ($op=='password_chk') {
|
|
$cnt = $http->request("pass");
|
|
$result=check_password_strength($cnt)['msg'];
|
|
if (count($result) == 0) {
|
|
echo json_response(["password" => "ok", "msg" => 0]);
|
|
} else {
|
|
$str="";
|
|
foreach ($result as $item) {$str.=sprintf("<li>%s</li>",$item);}
|
|
echo json_response(["password" => "nok", "msg" => '<ol>'.$str.'</ol>']);
|
|
|
|
}
|
|
return;
|
|
}
|
|
$html = var_export($_REQUEST, true);
|
|
set_language();
|
|
if ( LOGINPUT)
|
|
{
|
|
$file_loginput=fopen($_ENV['TMP'].'/scenario-ajax-'.$_SERVER['REQUEST_TIME'].'.php','a+');
|
|
fwrite ($file_loginput,"<?php \n");
|
|
fwrite ($file_loginput,'//@description:'.$op."\n");
|
|
fwrite($file_loginput, '$_GET='.var_export($_GET,true));
|
|
fwrite($file_loginput,";\n");
|
|
fwrite($file_loginput, '$_POST='.var_export($_POST,true));
|
|
fwrite($file_loginput,";\n");
|
|
fwrite($file_loginput, '$_POST[\'gDossier\']=$gDossierLogInput;');
|
|
fwrite($file_loginput,"\n");
|
|
fwrite($file_loginput, '$_GET[\'gDossier\']=$gDossierLogInput;');
|
|
fwrite($file_loginput,"\n");
|
|
fwrite($file_loginput,' $_REQUEST=array_merge($_GET,$_POST);');
|
|
fwrite($file_loginput,"\n");
|
|
fwrite($file_loginput,"include '".basename(__FILE__)."';\n");
|
|
fclose($file_loginput);
|
|
}
|
|
|
|
/**
|
|
* for widget we call immediately a file outside the ajax folder
|
|
*/
|
|
if ($op == 'widget') {
|
|
session_write_close();
|
|
require_once NOALYSS_INCLUDE.'/widget/ajax.php';
|
|
return;
|
|
}
|
|
|
|
$path = array(
|
|
// search accounting , detail ...
|
|
"account"=>"ajax_account",
|
|
// display card detail :possible to update or add
|
|
"card"=>"ajax_card",
|
|
"ledger"=>"ajax_ledger",
|
|
// Manage ledger access
|
|
"ledger_access"=>"ajax_user_security",
|
|
// Manage user profile
|
|
"profile"=>"ajax_user_security",
|
|
// enable or not the security on ledger
|
|
"user_sec_ledger"=>"ajax_user_security",
|
|
// enable or not the security on action
|
|
"user_sec_action"=>"ajax_user_security",
|
|
// Update in once all the ledgers
|
|
"ledger_access_all"=>"ajax_user_security",
|
|
// From the page C0SEC,set the actions
|
|
"action_access"=>"ajax_user_security",
|
|
// From the page C0SEC,set all the actions
|
|
"action_access_all"=>"ajax_user_security",
|
|
"todo_list"=>"ajax_todo_list",
|
|
// Writing operation History for a card or an accounting
|
|
"history"=>"ajax_history",
|
|
"mod_doc"=>"ajax_mod_document",
|
|
// Periode menu: PERIODE
|
|
'periode'=>"ajax_periode",
|
|
"mod_predf"=>"ajax_mod_predf_op",
|
|
"save_predf"=>"ajax_save_predf_op",
|
|
"search_action"=>"ajax_search_action",
|
|
"display_profile"=>"ajax_get_profile",
|
|
"det_menu"=>"ajax_get_menu_detail",
|
|
"add_menu"=>"ajax_add_menu",
|
|
"display_submenu"=>"ajax_display_submenu",
|
|
"remove_submenu"=>"ajax_remove_submenu",
|
|
"cardsearch"=>"ajax_boxcard_search",
|
|
"saldo"=>"ajax_bank_saldo",
|
|
"upd_receipt"=>"ajax_get_receipt",
|
|
"up_pay_method"=>"ajax_update_payment",
|
|
"openancsearch"=>"ajax_anc_search",
|
|
"resultancsearch"=>"ajax_anc_search",
|
|
"autoanc"=>"ajax_auto_anc_card",
|
|
"create_menu"=>"ajax_create_menu",
|
|
"modify_menu"=>"ajax_mod_menu",
|
|
"mod_stock_repo"=>"ajax_mod_stock_repo",
|
|
"view_mod_stock"=>"ajax_view_mod_stock",
|
|
"fddetail"=>"ajax_fiche_def_detail",
|
|
"vw_action"=>"ajax_view_action",
|
|
"minrow"=>"ajax_min_row",
|
|
"navigator"=>"ajax_navigator",
|
|
"preference"=>"ajax_preference",
|
|
"bookmark"=>"ajax_bookmark",
|
|
// Tag
|
|
"tag_detail"=>"ajax_tag_detail",
|
|
"tag_save"=>"ajax_tag_save",
|
|
"tag_list"=>"ajax_tag_list",
|
|
"tag_add"=>"ajax_tag_add_action",
|
|
"tag_remove"=>"ajax_tag_remove_action",
|
|
"tag_choose"=>"ajax_tag_choose",
|
|
"tag_activate"=>"ajax_tag_save",
|
|
// search
|
|
"search_display_tag"=>"ajax_search_display_tag",
|
|
"search_add_tag"=>"ajax_search_add_tag",
|
|
"search_clear_tag"=>"ajax_search_clear_tag",
|
|
"calendar_zoom"=>"ajax_calendar_zoom",
|
|
"ledger_show"=>"ajax_ledger_show",
|
|
//Show the available distribution keys for analytic
|
|
"anc_key_choice"=>"ajax_anc_key_choice" ,
|
|
//Clean the detail for analytic
|
|
"anc_key_clean"=>"ajax_anc_key_clean" ,
|
|
// Show the activities computed with the selected distribution key
|
|
"anc_key_compute"=>"ajax_anc_key_compute" ,
|
|
//From admin, revoke the access to a folder from an user
|
|
"folder_remove"=>"ajax_admin",
|
|
//From admin, display a list of folder to which the user has no access
|
|
"folder_display"=>"ajax_admin",
|
|
// From admin, grant the access to a folder to an
|
|
// user
|
|
"folder_add"=>"ajax_admin",
|
|
// From admin, display info and propose to drop the folder
|
|
"folder_drop"=>"ajax_admin",
|
|
// From admin, display the information of a folder you can
|
|
// modify
|
|
"folder_modify"=>"ajax_admin",
|
|
// From admin, display info and propose to drop the template
|
|
"modele_drop"=>"ajax_admin",
|
|
// From admin, display the information of a template you can modify
|
|
"modele_modify"=>"ajax_admin",
|
|
// From admin , upgrade Noalyss
|
|
"upgradeCore"=>"ajax_admin",
|
|
// From admin , upgrade or install plugin
|
|
"upgradePlugin"=>"ajax_admin",
|
|
// From admin , install a template
|
|
"installTemplate"=>"ajax_admin",
|
|
// From dashboard, display detail about last operation
|
|
"action_show"=>"ajax_gestion",
|
|
// From dashboard, display form for a new event
|
|
"action_add"=>"ajax_gestion",
|
|
// Save a event given in the short form
|
|
"action_save"=>"ajax_gestion",
|
|
/* display the lettering , callebd from acc_ledger : dsp_letter*/
|
|
"dl"=>"ajax_display_letter",
|
|
// Add , delete update anc accounting
|
|
"anc_accounting"=>"ajax_anc_accounting",
|
|
// Update name and description
|
|
"anc_updatedescription"=>"ajax_anc_plan",
|
|
// Update, insert or delete accounting frmo C0PCMN
|
|
"accounting"=>"ajax_accounting",
|
|
// Show detail of an ANC operation
|
|
"anc_detail_op"=>"ajax_anc_detail_operation",
|
|
// show history of an analytic account
|
|
"history_anc_account"=>"ajax_history_anc_account",
|
|
// Display the list of filter saved
|
|
"display_search_filter"=>"ajax_search_filter",
|
|
// Save search filter
|
|
"save_filter"=>"ajax_search_filter",
|
|
// Load a search filter
|
|
"load_filter"=>"ajax_search_filter",
|
|
// display a list of filter (alias saved search)
|
|
"display_list_filter"=>"ajax_search_filter",
|
|
// display tag for filter
|
|
'display_filter_tag'=>'ajax_search_filter',
|
|
// search operation to reconcile
|
|
'search_op'=>'ajax_search_operation',
|
|
// delete operation
|
|
'delete_search_operation'=>'ajax_search_filter',
|
|
// template category of card
|
|
'template_cat_card'=>'ajax_template_cat_card',
|
|
// Attribute for category of card
|
|
'template_cat_category'=>'ajax_template_cat_category',
|
|
// From FollowUp , update a comment on a file
|
|
'update_comment_followUp'=>'ajax_follow_up',
|
|
// Update a follow up's comment
|
|
'followup_comment_oneedit'=>'ajax_follow_up',
|
|
// TVA param
|
|
"tva_parameter"=>"ajax_tva_parameter",
|
|
// Currency , add / remove / update currency
|
|
"CurrencyManage"=>"ajax_currency",
|
|
// Currency , delete a rate
|
|
"CurrencyRateDelete"=>"ajax_currency",
|
|
// payment_method
|
|
"payment_method"=>"ajax_payment_method",
|
|
// Display all cards using an accounting
|
|
"display_all_card"=>"ajax_display_all_card",
|
|
// update list of predefined operation if ledger changes
|
|
"up_predef"=>"ajax_update_predef",
|
|
// cfgaction type of document
|
|
"cfgaction"=>'ajax_cfgaction',
|
|
// list options for multiple contact
|
|
"contact_option_list"=>'ajax_contact_option_list',
|
|
// Add group of tags
|
|
'tag_group'=>'ajax_tag_group',
|
|
// set the group for a tag
|
|
'tag_set_group'=>"ajax_tag_set_group",
|
|
// Document_state
|
|
"document_state"=>"ajax_document_state",
|
|
// Operations tag add
|
|
'operation_tag_add'=>"ajax_operation_tag",
|
|
// Operations tag remove
|
|
'operation_tag_remove'=>"ajax_operation_tag",
|
|
// Operations tag select
|
|
'operation_tag_select'=>"ajax_operation_tag",
|
|
// add or update forecast_item
|
|
"forecast_item"=>"ajax_forecast_item",
|
|
// add or update forecast_category
|
|
"forecast_category"=>"ajax_forecast_category",
|
|
// manage forecast
|
|
"forecast"=>"ajax_forecast",
|
|
// manage company
|
|
"company"=>"ajax_company",
|
|
// report definition
|
|
"report_definition"=>"ajax_report_definition",
|
|
// search all card , analytic or accounting
|
|
"search_account_card"=>"ajax_search_account_card",
|
|
// Mobile device menu from mobile_device_mtable
|
|
"mobile_device_menu"=>"ajax_mobile_device_menu",
|
|
// other_tax
|
|
"other_tax"=>"ajax_other_tax",
|
|
//visibility quantity
|
|
"update_visibility_quantity"=>"ajax_update_visibility_quantity",
|
|
// detail customer , supplier operation
|
|
"event_display_detail"=>"ajax_event_display_detail",
|
|
// update periode in opening operation
|
|
"operation_exercice+update_periode"=>"ajax_operation_exercice",
|
|
// modify row in exercice (opening/closing) operation
|
|
"operation_exercice+modify_row"=>"ajax_operation_exercice",
|
|
// save row in exercice (opening/closing) operation
|
|
"operation_exercice+save_row"=>"ajax_operation_exercice",
|
|
// compute the balance after saving row in exercice (opening/closing) operation
|
|
"operation_exercice+display_total"=>"ajax_operation_exercice",
|
|
// delete row in exercice (opening/closing) operation
|
|
"operation_exercice+delete_row"=>"ajax_operation_exercice",
|
|
// date in exercice (opening/closing) operation
|
|
"operation_exercice+date"=>"ajax_operation_exercice",
|
|
// text in exercice (opening/closing) operation
|
|
"operation_exercice+text"=>"ajax_operation_exercice",
|
|
// transfer operation to accountancy
|
|
'operation_exercice+transfer'=>"ajax_operation_exercice",
|
|
// view list of followup for a card
|
|
"view_followup_card"=>"ajax_follow_up",
|
|
//list filter for followup
|
|
'list_filter_followup'=>"ajax_follow_up",
|
|
//delete a filter for followup
|
|
'delete_filter_followup'=>"ajax_follow_up",
|
|
// Check VAT NUMBER with VIES European VAT
|
|
"check_vatnumber"=>"ajax_check_vatnumber",
|
|
// Tax Detail
|
|
"tax_detail"=>"ajax_tax_detail"
|
|
// card category definition : from CCARD
|
|
,"category_card_definition"=>"ajax_category_card_definition"
|
|
// activate plugin for a profile
|
|
,'activate_plugin'=>'ajax_activate_plugin'
|
|
// set the operation paid or unpaid
|
|
, 'payment_status'=>'ajax_payment_status'
|
|
) ;
|
|
|
|
if (array_key_exists($op, $path)) {
|
|
require NOALYSS_INCLUDE.'/ajax/'.$path[$op].".php";
|
|
return;
|
|
}
|
|
switch ($op)
|
|
{
|
|
/*
|
|
* Get the currency rate
|
|
*/
|
|
case "CurrencyRate":
|
|
$a_answer=array();
|
|
$a_answer['status']="NOK";
|
|
$http=new HttpInput();
|
|
try
|
|
{
|
|
$code=$http->get("p_code");
|
|
if ( $code==-1) {
|
|
$a_answer['content']=1;
|
|
}else {
|
|
$a_answer['content']=$cn->get_value("select ch_value from v_currency_last_value where currency_id=$1",
|
|
[$code]);
|
|
}
|
|
$a_answer['status']="OK";
|
|
}
|
|
catch (Exception $ex)
|
|
{
|
|
$a_answer['content']=$ex->getMessage();
|
|
}
|
|
$jsson=json_encode($a_answer, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_NUMERIC_CHECK);
|
|
header('Content-Type: application/json;charset=utf-8');
|
|
echo $jsson;
|
|
return;
|
|
|
|
|
|
break;
|
|
/*
|
|
* Get the currency code
|
|
*/
|
|
case "CurrencyCode":
|
|
$a_answer=array();
|
|
$a_answer['status']="NOK";
|
|
$http=new HttpInput();
|
|
try
|
|
{
|
|
$code=$http->get("p_code");
|
|
$a_answer['content']=$cn->get_value("select cr_code_iso||' ('||cr_name||')' from v_currency_last_value where currency_id=$1",
|
|
[$code]);
|
|
$a_answer['status']="OK";
|
|
}
|
|
catch (Exception $ex)
|
|
{
|
|
$a_answer['content']=$ex->getMessage();
|
|
}
|
|
$jsson=json_encode($a_answer, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_NUMERIC_CHECK);
|
|
header('Content-Type: application/json;charset=utf-8');
|
|
echo $jsson;
|
|
return;
|
|
|
|
|
|
break;
|
|
case "periode_change":
|
|
|
|
$field=$http->get("field");
|
|
$type=$http->get("type");
|
|
$exercice=$http->get("exercice","number");
|
|
$last=$http->get("last","string",0);
|
|
|
|
// if last == 1 then show first and last periode of the
|
|
// exercice
|
|
$periode_start=0;
|
|
$periode_end=0;
|
|
$t_periode=new Periode($cn);
|
|
if ( $last==1) {
|
|
list($per_max,$per_min)=$t_periode->get_limit($exercice);
|
|
$periode_start=$per_max->p_id;
|
|
$periode_end=$per_min->p_id;
|
|
}
|
|
|
|
$iperiod = new IPeriod($field);
|
|
$iperiod->id=$field;
|
|
$iperiod->user = $g_user;
|
|
$iperiod->cn = $cn;
|
|
$iperiod->filter_year = true;
|
|
$iperiod->exercice=$exercice;
|
|
// For France , propose the first periode
|
|
if ( $g_parameter->MY_REPORT=='N') {
|
|
$periode_start=$t_periode->get_first_periode();
|
|
$iperiod->filter_year = false;
|
|
}
|
|
if ( $type=="from")
|
|
{
|
|
$iperiod->show_end_date=FALSE;
|
|
$iperiod->value=$periode_start;
|
|
} elseif ($type=="to"){
|
|
$iperiod->show_start_date=FALSE;
|
|
$iperiod->value=$periode_end;
|
|
|
|
} else {
|
|
throw new Exception(_("Invalide type"));
|
|
}
|
|
|
|
$iperiod->type = ALL;
|
|
echo $iperiod->input();
|
|
|
|
return;
|
|
|
|
break;
|
|
case "pref_exercice":
|
|
$iperiod = new IPeriod("period");
|
|
$iperiod->id="setting_period";
|
|
$iperiod->user = $g_user;
|
|
$iperiod->cn = $cn;
|
|
$iperiod->filter_year = true;
|
|
$iperiod->exercice=$http->get("exercice");
|
|
|
|
$iperiod->type = ALL;
|
|
echo $iperiod->input();
|
|
|
|
return;
|
|
break;
|
|
case "remove_anc":
|
|
if ($g_user->check_module('ANCODS') == 0)
|
|
exit();
|
|
$oa_group=$http->get("oa","number");
|
|
$cn->exec_sql("delete from operation_analytique where oa_group=$1", array($oa_group));
|
|
break;
|
|
case "rm_stock":
|
|
if ($g_user->check_module('STOCK') == 0)
|
|
exit();
|
|
require_once NOALYSS_INCLUDE.'/constant.security.php';
|
|
$cn->exec_sql('delete from stock_goods where sg_id=$1', array($s_id));
|
|
$html = escape_xml($s_id);
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
printf('{"d_id":"%s"}', $s_id);
|
|
exit();
|
|
break;
|
|
//--------------------------------------------------
|
|
// get the last date of a ledger
|
|
case 'lastdate':
|
|
require_once NOALYSS_INCLUDE.'/class/acc_ledger_fin.class.php';
|
|
$p_jrn=$http->get('p_jrn','number');
|
|
$ledger = new Acc_Ledger_Fin($cn, $p_jrn);
|
|
$html = $ledger->get_last_date();
|
|
$html = escape_xml($html);
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
echo <<<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<data>
|
|
<code>e_date</code>
|
|
<value>$html</value>
|
|
</data>
|
|
EOF;
|
|
|
|
break;
|
|
case 'bkname':
|
|
require_once NOALYSS_INCLUDE.'/class/acc_ledger_fin.class.php';
|
|
$p_jrn=$http->get('p_jrn','number');
|
|
$ledger = new Acc_Ledger_Fin($cn, $p_jrn);
|
|
$html = $ledger->get_bank_name();
|
|
$html = escape_xml($html);
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
echo <<<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<data>
|
|
<code>bkname</code>
|
|
<value>$html</value>
|
|
</data>
|
|
EOF;
|
|
break;
|
|
// display new calendar
|
|
case 'cal':
|
|
require_once NOALYSS_INCLUDE.'/class/calendar.class.php';
|
|
/* others report */
|
|
$cal = new Calendar();
|
|
$per=$http->get("per","number");
|
|
$cal->set_periode($per);
|
|
$notitle=$http->get("notitle", "string",0);
|
|
$html = "";
|
|
$html = $cal->display($http->get('t'),$notitle);
|
|
$html = escape_xml($html);
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
echo <<<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<data>
|
|
<code>$html</code>
|
|
</data>
|
|
EOF;
|
|
break;
|
|
|
|
/**************************************************************************
|
|
* show dialog box to let the choice of a VAT to use
|
|
*************************************************************************/
|
|
case 'dsp_tva':
|
|
$cn = Dossier::connect();
|
|
// Filter the VAT
|
|
$filter=$http->get("filter","string","none");
|
|
if ( $filter == 'sale') {
|
|
$Res = $cn->exec_sql("select *
|
|
from v_tva_rate
|
|
where
|
|
tva_sale <> '#'
|
|
order by tva_id asc");
|
|
|
|
} elseif ($filter == "purchase") {
|
|
|
|
$Res = $cn->exec_sql("select *
|
|
from
|
|
v_tva_rate
|
|
where
|
|
tva_purchase <> '#'
|
|
order by tva_id asc");
|
|
}else {
|
|
|
|
$Res = $cn->exec_sql("select * from v_tva_rate
|
|
where
|
|
tva_purchase <> '#' and tva_sale <> '#'
|
|
order by tva_id asc");
|
|
}
|
|
$Max = Database::num_row($Res);
|
|
$r = "";
|
|
$r.=HtmlInput::title_box(_('Choisissez la TVA'),'tva_select',"close","","y");
|
|
$r.='<div >';
|
|
$r.=_('Cherche')." ".HtmlInput::filter_table("tva_select_table",'0,1,2,3' , 1);
|
|
$r.= '<TABLE class="sortable" style="width:100%" id="tva_select_table">';
|
|
$r.=th(_('id'),'class="sorttable_sorted"');
|
|
$r.=th(_('code'));
|
|
$r.=th(_('Taux'));
|
|
$r.=th(_('Symbole'));
|
|
$r.=th(_('Explication'));
|
|
|
|
for ($i = 0; $i < $Max; $i++)
|
|
{
|
|
$row = Database::fetch_array($Res, $i);
|
|
if (!isset($compute))
|
|
{
|
|
if (!isset($code))
|
|
{
|
|
$script = "onclick=\"$('$ctl').value='" . $row['tva_id'] . "';removeDiv('tva_select');\"";
|
|
}
|
|
else
|
|
{
|
|
$script = "onclick=\"$('$ctl').value='" . $row['tva_id'] . "';set_value('$code','" . $row['tva_label'] . "');removeDiv('tva_select');\"";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!isset($code))
|
|
{
|
|
$script = "onclick=\"$('$ctl').value='" . $row['tva_id'] . "';removeDiv('tva_select');clean_tva('$compute');compute_ledger('$compute');\"";
|
|
}
|
|
else
|
|
{
|
|
$script = "onclick=\"$('$ctl').value='" . $row['tva_id'] . "';set_value('$code','" . $row['tva_label'] . "');removeDiv('tva_select');clean_tva('$compute');compute_ledger('$compute');\"";
|
|
}
|
|
}
|
|
$set = '<INPUT TYPE="BUTTON" class="button" Value="select" ' . $script . '>';
|
|
$class=($i%2 == 0)?' class="odd" ':' class="even" ';
|
|
$r.='<tr'.$class. $script.' style="cursor : pointer">';
|
|
$r.=td($row['tva_id']);
|
|
$r.=td($row['tva_code']);
|
|
$r.=td($row['tva_rate']);
|
|
$r.=td($row['tva_label']);
|
|
$r.=td($row['tva_comment']);
|
|
$r.='</tr>';
|
|
}
|
|
$r.='</TABLE>';
|
|
$r.=HtmlInput::button_close("tva_select");
|
|
$r.='</div>';
|
|
$html = escape_xml($r);
|
|
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
echo <<<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<data>
|
|
<code>$html</code>
|
|
<popup>$popup</popup>
|
|
</data>
|
|
EOF;
|
|
break;
|
|
case 'label_tva':
|
|
$code=$http->request('code','string','x');
|
|
$cn =Dossier::connect();
|
|
$tva=Acc_Tva::build($cn, $id);
|
|
|
|
if ($tva->tva_id == -1 )
|
|
$value = _('tva inconnue');
|
|
else
|
|
{
|
|
$value=htmlentities($tva->tva_label);
|
|
}
|
|
header('Content-type: text/xml; charset=UTF-8');
|
|
echo <<<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<data>
|
|
<code>$code</code>
|
|
<value>$value</value>
|
|
</data>
|
|
EOF;
|
|
|
|
break;
|
|
|
|
case 'add_plugin':
|
|
$me_code = new IText('me_code');
|
|
$me_file = new IText('me_file');
|
|
$me_menu = new IText('me_menu');
|
|
$me_description = new IText("me_description");
|
|
$me_parameter = new IText("me_parameter");
|
|
$new = true;
|
|
require_once NOALYSS_INCLUDE.'/ajax/ajax_plugin_detail.php';
|
|
break;
|
|
case 'mod_plugin':
|
|
$m = $cn->get_array("select me_code,me_file,me_menu,me_description,me_parameter
|
|
from menu_ref where me_code=$1", array($me_code));
|
|
if (empty($m))
|
|
{
|
|
echo HtmlInput::title_box(_("Ce plugin n'existe pas "), $ctl,"close","","y");
|
|
echo "<p>"._("Il y a une erreur, ce plugin n'existe pas").
|
|
"</p>";
|
|
exit;
|
|
}
|
|
$me_code = new IText('me_code', $m[0] ['me_code']);
|
|
$me_file = new IText('me_file', $m[0] ['me_file']);
|
|
$me_menu = new IText('me_menu', $m[0] ['me_menu']);
|
|
$me_description = new IText("me_description", $m[0] ['me_description']);
|
|
$me_parameter = new IText("me_parameter", $m[0] ['me_parameter']);
|
|
$new = false;
|
|
require_once NOALYSS_INCLUDE.'/ajax/ajax_plugin_detail.php';
|
|
break;
|
|
case 'ledger_description':
|
|
$ajrn=$cn->get_array('select jrn_def_name,jrn_def_description from jrn_def where jrn_def_id=$1',array($l));
|
|
if ( count($ajrn)==1)
|
|
{
|
|
echo '<div>';
|
|
echo '<h1 >'.$ajrn[0]['jrn_def_name'].'</h1>';
|
|
if ( noalyss_trim($ajrn[0]['jrn_def_description']) != "") {
|
|
echo '<p style="border:1px solid;margin-top:0px;padding:1rem">'.$ajrn[0]['jrn_def_description'].'</p>';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
exit();
|
|
break;
|
|
case 'currencyCode':
|
|
$ledger_id=$http->request('ledger',"number");
|
|
$code=$cn->get_value("select cr_code_iso from public.currency join jrn_def on (currency.id=jrn_def.currency_id) where jrn_def.jrn_def_id=$1",
|
|
[$ledger_id]);
|
|
echo $code;
|
|
break;
|
|
case 'up_other_tax':
|
|
$cn =Dossier::connect();
|
|
$ledger_id=$http->request('jrn_id','number');
|
|
$acc_ledger=new Acc_Ledger($cn,$ledger_id);
|
|
echo $acc_ledger->input_additional_tax();
|
|
break;
|
|
default:
|
|
var_dump($_REQUEST);
|
|
}
|