Patch level :10.0
Files correlati :ca0.exe,ca0900a.msk,ca3.exe,camenu.men Ricompilazione Demo : [ ] Commento : programma anti-angcas funzionante per il bilancio di commessa; da installare e provare a dinamica git-svn-id: svn://10.65.10.50/branches/R_10_00@21381 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
0ac2834697
commit
deca4a96c3
@ -5,7 +5,6 @@
|
||||
|
||||
#include "calib01.h"
|
||||
#include "calibmsk.h"
|
||||
#include "catbauc.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//MASCHERA GENERICA DI TABELLA NON GERARCHICA
|
||||
@ -176,7 +175,7 @@ void TTab_app_ca::common_mode(TMask& m, const bool mode_insert)
|
||||
//Solo per tabella %AUC
|
||||
//in ricerca semplice la ricerca viene fatta sulla tabella %AUC (quindi usa il campo F_AUC_CODICE)
|
||||
//in inserimento la ricerca va fatta sul file USER (quindi usa il campo F_AUC_CODICE1)
|
||||
if (get_tabname() == "%AUC")
|
||||
/*if (get_tabname() == "%AUC")
|
||||
{
|
||||
if (mode_insert)
|
||||
{
|
||||
@ -188,7 +187,7 @@ void TTab_app_ca::common_mode(TMask& m, const bool mode_insert)
|
||||
m.hide(F_AUC_CODICE1);
|
||||
m.show(F_AUC_CODICE);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void TTab_app_ca::init_query_mode(TMask& m)
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include <defmask.h>
|
||||
#include <dongle.h>
|
||||
#include <prefix.h>
|
||||
#include <utility.h>
|
||||
|
||||
@ -45,9 +46,9 @@ void TGestione_permessi_CA_mask::ini2mask(const TString& username)
|
||||
TConfig config(fileconf, username);
|
||||
|
||||
//filtri principali
|
||||
set(F_CODCMS, config.get("Codcms"));
|
||||
set(F_CDC, config.get("CdC"));
|
||||
set(F_FASE, config.get("Fase"));
|
||||
set(F_CODCMS, config.get("Cms"));
|
||||
set(F_CDC, config.get("Cdc"));
|
||||
set(F_FASE, config.get("Fas"));
|
||||
//filtri secondari per programma
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
for (int i = 0; config.exist("Prog", NULL, i); i++)
|
||||
@ -67,9 +68,9 @@ void TGestione_permessi_CA_mask::mask2ini()
|
||||
TConfig config(fileconf, username);
|
||||
|
||||
//filtri principali
|
||||
config.set("Codcms", get(F_CODCMS));
|
||||
config.set("CdC", get(F_CDC));
|
||||
config.set("Fase", get(F_FASE));
|
||||
config.set("Cms", get(F_CODCMS));
|
||||
config.set("Cdc", get(F_CDC));
|
||||
config.set("Fas", get(F_FASE));
|
||||
//filtri secondari per programma
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
FOR_EACH_SHEET_ROW(sf_righe, r, riga)
|
||||
@ -140,7 +141,16 @@ void TGestione_permessi_CA::main_loop()
|
||||
|
||||
bool TGestione_permessi_CA::create()
|
||||
{
|
||||
return TSkeleton_application::create();
|
||||
const TString& utente = user();
|
||||
|
||||
if (utente.compare(::dongle().administrator()) != 0)
|
||||
{
|
||||
TString msg;
|
||||
msg << "Utente " << utente << " non autorizzato all'uso di questo programma!";
|
||||
return error_box(msg);
|
||||
}
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
int ca0900 (int argc, char* argv[])
|
||||
|
@ -58,6 +58,7 @@ BEGIN
|
||||
ITEM "Commesse@50"
|
||||
ITEM "Cdc@50"
|
||||
ITEM "Fasi@50"
|
||||
FLAGS "|"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
@ -76,32 +77,47 @@ END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 3 "Esempi"
|
||||
PROMPT 0 3 "La variabile va indicata come $(CMS), $(CDC), $(FAS). Il valore va tra apici."
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 4 "CODCMS=codicecommessa, CODCMS=cod*, CODCMS?=cod"
|
||||
PROMPT 0 4 "Esempi"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 5 "CODCOSTO=codicecdc, CODCOSTO=cod*, CODCOSTO?=cod"
|
||||
PROMPT 0 5 " ($(CMS)='codicecommessa')||($(CMS)?='cod*')"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 6 "CODFASE=codicefase, CODFASE=cod*, CODFASE?=cod"
|
||||
PROMPT 0 6 " $(CDC)?='cod*'"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 7 "Nota: il filtro sulle fasi è applicabile solo se le fasi NON sono collegate a"
|
||||
PROMPT 0 7 " ($(FAS)='codicefase1')&&($(FAS)='codicefase2')"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 8 "commesse e CdC in configurazione contabilità analitica"
|
||||
PROMPT 0 8 "I valori sulla maschera principale si applicano a tutti i programmi che gestiscono Cms/CdC/Fasi"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 9 "I valori sullo sheet si applicano al solo programma indicato nel primo campo della riga: es. ca3 -7"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 10 "Nota: il filtro sulle fasi è applicabile solo se le fasi NON sono collegate a"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 0 11 "commesse e CdC in configurazione contabilità analitica!!!"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -172,6 +172,12 @@ TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
|
||||
} //for(int i=0..
|
||||
} //if(levels>=2..
|
||||
} //if(use_pdcc..
|
||||
|
||||
//filtro sui permessi utente (centro di costo e fase)
|
||||
if (ca_create_user_select_clause(LF_CDC).full())
|
||||
efield(F_CDC).browse()->cursor()->set_filterfunction(ca_filter_function);
|
||||
if (ca_create_user_select_clause(LF_FASI).full())
|
||||
efield(F_FASE).browse()->cursor()->set_filterfunction(ca_filter_function);
|
||||
|
||||
//***ACHTUNG!!!***
|
||||
//Questa chiamata serve per generare i campi fase/commessa esattamente come strutturati nella configurazione..
|
||||
@ -307,7 +313,15 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
|
||||
//stampa tutte le fasi distinte in modo riassuntivo (crpa dedicate)
|
||||
TString_array lista_fasi;
|
||||
//crea un TString_array con tutte le fasi distinte non ripetute
|
||||
TISAM_recordset file_fasi("USE FASI");
|
||||
TString query;
|
||||
query = "USE FASI";
|
||||
|
||||
const TString& select = ca_create_user_select_clause(LF_FASI);
|
||||
if (select.full())
|
||||
query << "\nSELECT " << select;
|
||||
|
||||
TISAM_recordset file_fasi(query);
|
||||
|
||||
for (TRecnotype j = 0; file_fasi.move_to(j); j++)
|
||||
{
|
||||
const TString16 curr_fase = file_fasi.get(FASI_CODFASE).as_string();
|
||||
@ -340,7 +354,15 @@ void TPrint_bilancio_cms::print_or_preview(const bool stampa)
|
||||
//stampa tutte le fasi distinte in modo riassuntivo (crpa dedicate)
|
||||
TString_array lista_cdc;
|
||||
//crea un TString_array con tutte le fasi distinte non ripetute
|
||||
TISAM_recordset file_cdc("USE CDC");
|
||||
TString query;
|
||||
query = "USE CDC";
|
||||
//filtra per utente se l'utente ha limitazioni sui CDC
|
||||
const TString& select = ca_create_user_select_clause(LF_CDC);
|
||||
if (select.full())
|
||||
query << "\nSELECT " << select;
|
||||
|
||||
TISAM_recordset file_cdc(query);
|
||||
|
||||
for (TRecnotype j = 0; file_cdc.move_to(j); j++)
|
||||
{
|
||||
const TString& curr_cdc = file_cdc.get(CDC_CODCOSTO).as_string();
|
||||
|
125
ca/ca3883.cpp
125
ca/ca3883.cpp
@ -547,41 +547,66 @@ const TDate TPrint_saldana_recordset::calcola_min_datacomp(const TDate& datainie
|
||||
}
|
||||
|
||||
|
||||
//crea la query base per la scansione dei SALDANA; si usa nelle parse_saldana e parse_saldana_futuri
|
||||
TString TPrint_saldana_recordset::crea_query_saldana()
|
||||
const TString& TPrint_saldana_recordset::crea_select(const int logicnum)
|
||||
{
|
||||
TString query;
|
||||
query = "USE SALDANA";
|
||||
|
||||
TString select = ca_create_user_select_clause(logicnum);
|
||||
//void ca_append_and(TString& query, const TString& clause)
|
||||
switch (_tipostampa)
|
||||
{
|
||||
case 0: break;
|
||||
case 1:
|
||||
case 4:
|
||||
if (_fase.full())
|
||||
query << " SELECT FASE=\"" << _fase << "\"";
|
||||
{
|
||||
TString clause;
|
||||
clause << ca_dollar2fieldname(logicnum, "$(FAS)") << "=\"" << _fase << "\"";
|
||||
ca_append_and(select, clause);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
if (_cdc.full())
|
||||
query << " SELECT COSTO=\"" << _cdc << "\"";
|
||||
{
|
||||
TString clause;
|
||||
clause << ca_dollar2fieldname(logicnum, "$(CDC)") << "=\"" << _cdc << "\"";
|
||||
ca_append_and(select, clause);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (_fase.full() || _cdc.full())
|
||||
{
|
||||
TString clause;
|
||||
if (_fase.full() && _cdc.full())
|
||||
query << " SELECT (FASE=\"" << _fase << "\")&&(COSTO=\"" << _cdc << "\")";
|
||||
clause << "(" << ca_dollar2fieldname(logicnum, "$(FAS)") << "=\"" << _fase
|
||||
<< "\")&&(" << ca_dollar2fieldname(logicnum, "$(CDC)") << "=\"" << _cdc << "\")";
|
||||
else
|
||||
{
|
||||
if (_fase.full())
|
||||
query << " SELECT FASE=\"" << _fase << "\"";
|
||||
clause << ca_dollar2fieldname(logicnum, "$(FAS)") << "=\"" << _fase << "\"";
|
||||
else
|
||||
query << " SELECT COSTO=\"" << _cdc << "\"";
|
||||
clause << ca_dollar2fieldname(logicnum, "$(CDC)") << "=\"" << _cdc << "\"";
|
||||
}
|
||||
ca_append_and(select, clause);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return query;
|
||||
return get_tmp_string() = select;
|
||||
}
|
||||
|
||||
|
||||
//crea la query base per la scansione dei SALDANA; si usa nelle parse_saldana e parse_saldana_futuri
|
||||
const TString& TPrint_saldana_recordset::crea_query_saldana()
|
||||
{
|
||||
const TString& select = crea_select(LF_SALDANA);
|
||||
|
||||
TString query;
|
||||
query = "USE SALDANA";
|
||||
|
||||
if (select.full())
|
||||
query << " SELECT " << select;
|
||||
|
||||
return get_tmp_string() = query;
|
||||
}
|
||||
|
||||
|
||||
@ -615,7 +640,7 @@ void TPrint_saldana_recordset::parse_saldana(TAssoc_array* cms, const TDate& dat
|
||||
if (_tipo == 9)
|
||||
{
|
||||
//non vanno considerati saldi di esercizi futuri a quello scelto!!!
|
||||
query << "USE SALDANA";
|
||||
query = "USE SALDANA";
|
||||
}
|
||||
|
||||
TISAM_recordset saldana_set(query);
|
||||
@ -974,37 +999,11 @@ void TPrint_saldana_recordset::parse_rmovana(TAssoc_array* cms, const TDate& dat
|
||||
TString query;
|
||||
query << "USE RMOVANA KEY 3\n";
|
||||
|
||||
switch (_tipostampa)
|
||||
{
|
||||
case 1:
|
||||
case 4:
|
||||
if (_fase.full())
|
||||
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
if (_cdc.full())
|
||||
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
break;
|
||||
case 3:
|
||||
if (_fase.full() || _cdc.full())
|
||||
{
|
||||
if (_fase.full() && _cdc.full())
|
||||
query << "SELECT (CODFASE=\"" << _fase << "\")&&(CODCCOSTO=\"" << _cdc << "\")\n";
|
||||
else
|
||||
{
|
||||
if (_fase.full())
|
||||
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
else
|
||||
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
const TString& select = crea_select(LF_RMOVANA);
|
||||
if (select.full())
|
||||
query << " SELECT " << select;
|
||||
|
||||
query << "JOIN MOVANA INTO NUMREG==NUMREG"
|
||||
query << "\nJOIN MOVANA INTO NUMREG==NUMREG"
|
||||
<< "\nFROM DATACOMP=#MINDATACOMP"
|
||||
<< "\nTO DATACOMP=#DATACALCOLO";
|
||||
TISAM_recordset recset(query);
|
||||
@ -1066,36 +1065,12 @@ void TPrint_saldana_recordset::parse_rdoc_ordini(TAssoc_array* cms, const TDate&
|
||||
query << "USE RDOC KEY 1\n";
|
||||
query << "SELECT (BETWEEN(DOC.DATADOC,#DATAINIES,#DATACALCOLO))&&(RIGAEVASA!=\"X\")";
|
||||
|
||||
//filtro su cdc/cms/fasi (fatto come per saldi e rmovana; purtroppo non si può metodizzare perchè in tutti i files..
|
||||
//..i nomi dei campi sono diversi!
|
||||
switch (_tipostampa)
|
||||
//filtro su cdc/cms/fasi (fatto come per saldi e rmovana; in tutti i files..
|
||||
//..i nomi dei campi sono diversi! -> tentiamo con il metodo automaggico
|
||||
const TString& select = crea_select(LF_RIGHEDOC);
|
||||
if (select.full())
|
||||
{
|
||||
case 1:
|
||||
case 4:
|
||||
if (_fase.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")";
|
||||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
if (_cdc.full())
|
||||
query << "&&(CODCOSTO=\"" << _cdc << "\")";
|
||||
break;
|
||||
case 3:
|
||||
if (_fase.full() || _cdc.full())
|
||||
{
|
||||
if (_fase.full() && _cdc.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")&&(CODCOSTO=\"" << _cdc << "\")";
|
||||
else
|
||||
{
|
||||
if (_fase.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")";
|
||||
else
|
||||
query << "&&(CODCOSTO=\"" << _cdc << "\")";
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
query << "&&(" << select << ")";
|
||||
}
|
||||
|
||||
query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"
|
||||
@ -1339,6 +1314,10 @@ void TPrint_saldana_recordset::parse_rdoc_fatture(TAssoc_array* cms, const TDate
|
||||
continue;
|
||||
if (_fase.not_empty() && rmovana.get(RMOVANA_CODFASE) != _fase)
|
||||
continue;
|
||||
|
||||
//ulteriore controllo in base ai permessi utente! se il record non rispetta i permessi viene saltato!
|
||||
if (!ca_filter_record(rmovana))
|
||||
continue;
|
||||
|
||||
//metodo per il calcolo importo riga riproporzionato
|
||||
//metodo per generare i saldi alla data della riga analitica in base alla vita della riga
|
||||
@ -1398,8 +1377,8 @@ void TPrint_saldana_recordset::create_lines_to_print()
|
||||
// si fa solo se l'utente Adolfo lo ha deciso sulla maschera
|
||||
if (_include_documenti)
|
||||
{
|
||||
parse_rdoc_ordini(cms, datainiesc, datafinesc);
|
||||
parse_rdoc_fatture(cms, datainiesc, datafinesc);
|
||||
parse_rdoc_ordini(cms, datainiesc, datafinesc);
|
||||
parse_rdoc_fatture(cms, datainiesc, datafinesc);
|
||||
}
|
||||
} //if(_tipo==8)...
|
||||
|
||||
|
@ -108,7 +108,8 @@ protected:
|
||||
void parse_saldana_futuri();
|
||||
void parse_rdoc_ordini(TAssoc_array* cms, const TDate& datainiesc, const TDate& datafinesc);
|
||||
void parse_rdoc_fatture(TAssoc_array* cms, const TDate& datainiesc, const TDate& datafinesc);
|
||||
TString crea_query_saldana();
|
||||
const TString& crea_select(const int logicnum);
|
||||
const TString& crea_query_saldana();
|
||||
|
||||
//per il solo ca3800
|
||||
void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil,
|
||||
|
233
ca/calib01.cpp
233
ca/calib01.cpp
@ -1,3 +1,5 @@
|
||||
#include <applicat.h>
|
||||
#include <config.h>
|
||||
#include <dongle.h>
|
||||
#include <modaut.h>
|
||||
#include <tree.h>
|
||||
@ -6,12 +8,15 @@
|
||||
|
||||
#include <mov.h>
|
||||
#include <pconti.h>
|
||||
#include <doc.h>
|
||||
#include <rdoc.h>
|
||||
|
||||
#include "calib01.h"
|
||||
#include "calib02.h"
|
||||
#include "calibmsk.h"
|
||||
#include "../cg/cg2103.h"
|
||||
|
||||
#include "cdc.h"
|
||||
#include "commesse.h"
|
||||
#include "fasi.h"
|
||||
#include "movana.h"
|
||||
@ -20,6 +25,7 @@
|
||||
#include "rrip.h"
|
||||
#include "saldana.h"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TConfig_anal
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -357,38 +363,207 @@ bool ca_test_multilevel_field(TEdit_field& fld, int level)
|
||||
// Utilities
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
static const TString & ca_create_user_select_clause(int logic)
|
||||
const char* ca_dollar2fieldname(int logic, const char* dollar)
|
||||
{
|
||||
TString & select = get_tmp_string(128);
|
||||
const char* fieldname = NULL;
|
||||
|
||||
switch (logic)
|
||||
{
|
||||
case LF_COMMESSE:
|
||||
fieldname = "S0";
|
||||
break;
|
||||
case LF_CDC:
|
||||
fieldname = "S1";
|
||||
break;
|
||||
case LF_FASI:
|
||||
fieldname = "S2";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (fieldname != NULL)
|
||||
{
|
||||
const TString utente(user());
|
||||
const TString gruppo(cache().get(LF_USER, utente,"GROUPNAME"));
|
||||
|
||||
if (gruppo.full())
|
||||
select = cache().get("%AUC", gruppo, fieldname);
|
||||
if (utente.full())
|
||||
select = cache().get("%AUC", utente, fieldname);
|
||||
}
|
||||
return select;
|
||||
CHECKS(dollar && *dollar == '$', "False dollar", dollar);
|
||||
//cerca il nome del campo della variabile dollarata nel file logic in questione
|
||||
if (xvt_str_compare_ignoring_case(dollar, "$(CDC)") == 0)
|
||||
{
|
||||
switch (logic)
|
||||
{
|
||||
case LF_DOC: return DOC_CODCOSTO;
|
||||
case LF_RIGHEDOC: return RDOC_CODCOSTO;
|
||||
case LF_RMOVANA: return RMOVANA_CODCCOSTO;
|
||||
case LF_SALDANA: return SALDANA_COSTO;
|
||||
default : return CDC_CODCOSTO;
|
||||
}
|
||||
}
|
||||
if (xvt_str_compare_ignoring_case(dollar, "$(CMS)") == 0)
|
||||
{
|
||||
switch (logic)
|
||||
{
|
||||
case LF_DOC: return DOC_CODCMS;
|
||||
case LF_RIGHEDOC: return RDOC_CODCMS;
|
||||
case LF_FASI: return FASI_CODCMSFAS;
|
||||
case LF_RMOVANA: return RMOVANA_CODCMS;
|
||||
case LF_SALDANA: return SALDANA_COMMESSA;
|
||||
default : return COMMESSE_CODCOSTO;
|
||||
}
|
||||
}
|
||||
if (xvt_str_compare_ignoring_case(dollar, "$(FAS)") == 0)
|
||||
{
|
||||
switch (logic)
|
||||
{
|
||||
case LF_DOC: return DOC_FASCMS;
|
||||
case LF_RIGHEDOC: return RDOC_FASCMS;
|
||||
case LF_RMOVANA: return RMOVANA_CODFASE;
|
||||
case LF_SALDANA: return SALDANA_FASE;
|
||||
default : return FASI_CODFASE;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ca_append_and(TString& query, const TString& clause)
|
||||
{
|
||||
if (clause.full())
|
||||
{
|
||||
if (query.full())
|
||||
{
|
||||
query.insert("(");
|
||||
query << ")&&(" << clause << ")";
|
||||
}
|
||||
else
|
||||
query = clause;
|
||||
}
|
||||
}
|
||||
|
||||
static const TString& ca_get_user_permissions(const TString& utente, const int logic)
|
||||
{
|
||||
TString select;
|
||||
|
||||
const TString gruppo(cache().get(LF_USER, utente, "GROUPNAME"));
|
||||
if (gruppo.full())
|
||||
select = ca_get_user_permissions(gruppo, logic);
|
||||
|
||||
TFilename fileconf = firm2dir(-1); // Directory dati
|
||||
fileconf.add("config"); // + Directory config
|
||||
fileconf.add("ca0900conf.ini");
|
||||
TConfig ini_permessi(fileconf);
|
||||
|
||||
if (ini_permessi.set_paragraph(utente))
|
||||
{
|
||||
const char* fieldname = NULL;
|
||||
switch (logic)
|
||||
{
|
||||
case LF_COMMESSE: fieldname = "Cms"; break;
|
||||
case LF_CDC: fieldname = "Cdc"; break;
|
||||
case LF_FASI: fieldname = "Fas"; break;
|
||||
default: break;
|
||||
}
|
||||
if (fieldname != NULL)
|
||||
{
|
||||
const TString& expr = ini_permessi.get(fieldname);
|
||||
ca_append_and(select, expr);
|
||||
|
||||
//che programma sono che chiamo questa funzione?
|
||||
const TFilename prog_name = main_app().argv(0);
|
||||
TString8 key = prog_name.name_only();
|
||||
key << " " << main_app().argv(1);
|
||||
|
||||
TToken_string row(80, SAFE_PIPE_CHR);
|
||||
for (int r = 0;; r++)
|
||||
{
|
||||
row = ini_permessi.get("Prog", NULL, r);
|
||||
if (row.blank())
|
||||
break;
|
||||
if (key == row.get(0))
|
||||
{
|
||||
int column = 0;
|
||||
switch (logic)
|
||||
{
|
||||
case LF_COMMESSE: column = 1; break;
|
||||
case LF_CDC: column = 2; break;
|
||||
case LF_FASI: column = 3; break;
|
||||
default: break;
|
||||
}
|
||||
const TString& prog_expr = row.get(column);
|
||||
ca_append_and(select, prog_expr);
|
||||
} //if (key == row.get(0))...
|
||||
} //for (int r = 0;; r++)...
|
||||
|
||||
} //if (fieldname...
|
||||
|
||||
} //if (ini_permessi.set...
|
||||
|
||||
return select.full() ? (get_tmp_string() = select) : EMPTY_STRING;
|
||||
}
|
||||
|
||||
|
||||
static const TString& ca_get_user_permissions_or_empty(const TString& utente, const int logic)
|
||||
{
|
||||
const TString& perm = ca_get_user_permissions(utente, logic);
|
||||
if (perm.full())
|
||||
{
|
||||
TString& subclause = get_tmp_string();
|
||||
subclause << "(" << perm << ")||($(";
|
||||
switch (logic)
|
||||
{
|
||||
case LF_CDC: subclause << "CDC"; break;
|
||||
case LF_COMMESSE: subclause << "CMS"; break;
|
||||
case LF_FASI: subclause << "FAS"; break;
|
||||
default: break;
|
||||
}
|
||||
subclause << ")==\"\")";
|
||||
return subclause;
|
||||
}
|
||||
|
||||
return EMPTY_STRING;
|
||||
}
|
||||
|
||||
const TString& ca_create_user_select_clause(int logic)
|
||||
{
|
||||
static TArray clauses;
|
||||
TString* clause = (TString*)clauses.objptr(logic);
|
||||
if (clause == NULL)
|
||||
{
|
||||
clause = new TString;
|
||||
switch (logic)
|
||||
{
|
||||
case LF_CDC:
|
||||
case LF_COMMESSE:
|
||||
case LF_FASI:
|
||||
*clause = ca_get_user_permissions(user(), logic);
|
||||
break;
|
||||
case LF_DOC:
|
||||
case LF_RIGHEDOC:
|
||||
case LF_RMOVANA:
|
||||
case LF_SALDANA:
|
||||
ca_append_and(*clause, ca_get_user_permissions_or_empty(user(), LF_CDC));
|
||||
ca_append_and(*clause, ca_get_user_permissions_or_empty(user(), LF_COMMESSE));
|
||||
ca_append_and(*clause, ca_get_user_permissions_or_empty(user(), LF_FASI));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
for (int dollar = clause->find("$("); dollar >= 0; dollar = clause->find("$(", dollar))
|
||||
{
|
||||
const int closed = clause->find(')', dollar + 4);
|
||||
const TString& before = clause->left(dollar);
|
||||
const TString& field = clause->sub(dollar, closed + 1);
|
||||
const TString& after = clause->mid(closed + 1);
|
||||
clause->cut(0) << before << ca_dollar2fieldname(logic, field) << after;
|
||||
}
|
||||
clauses.add(clause, logic);
|
||||
}
|
||||
return *clause;
|
||||
}
|
||||
|
||||
|
||||
bool ca_filter_record(const TRectype& rec)
|
||||
{
|
||||
bool good = true;
|
||||
const TString& filter = ca_create_user_select_clause(rec.num());
|
||||
if (filter.full())
|
||||
{
|
||||
TExpression expr(filter, _strexpr);
|
||||
for (int v = expr.numvar() - 1; v >= 0; v--)
|
||||
{
|
||||
const char* field = expr.varname(v);
|
||||
expr.setvar(v, rec.get(field));
|
||||
}
|
||||
good = expr.as_bool();
|
||||
}
|
||||
return good;
|
||||
}
|
||||
|
||||
|
||||
bool ca_filter_function(const TRelation* rel)
|
||||
{
|
||||
return rel != NULL && ca_filter_record(rel->curr());
|
||||
}
|
||||
|
||||
|
||||
static void ca_append_select_clause(ostream& out, int level, int logic, bool upper_limit)
|
||||
{
|
||||
TString str;
|
||||
|
@ -68,6 +68,14 @@ public:
|
||||
const TMultilevel_code_info& ca_multilevel_code_info(int logicnum);
|
||||
const TMultilevel_code_info* ca_multilevel_code_info_by_index(int level);
|
||||
bool ca_test_multilevel_field(TEdit_field& fld, int level);
|
||||
|
||||
//metodi di filtraggio avanzato anche in base ai permessi utente
|
||||
const char* ca_dollar2fieldname(int logic, const char* dollar);
|
||||
void ca_append_and(TString& query, const TString& clause);
|
||||
const TString& ca_create_user_select_clause(int logic);
|
||||
bool ca_filter_record(const TRectype& rec);
|
||||
bool ca_filter_function(const TRelation* rel);
|
||||
|
||||
int ca_create_fields(TMask& msk, int page, int logicnum, int x, int y, short key_id, short des_id,
|
||||
unsigned int mode = 0x0, const char* fieldname = NULL, int from = 0);
|
||||
int ca_create_fields_compact(TMask& msk, int page, int logicnum, int x, int y,
|
||||
|
@ -36,7 +36,7 @@ Item_01 = "Piano dei conti", "ca0 -3", "SF"
|
||||
Item_02 = "Centri di costo", "ca0 -4", "SF"
|
||||
Item_03 = "Commesse", "ca0 -5", "SF"
|
||||
Item_04 = "Fasi", "ca0 -6", "SF"
|
||||
Item_05 = "Selezione archivi per Utente", "ca0 -0 %AUC", ""
|
||||
Item_05 = "Selezione archivi per Utente", "ca0 -8", "P"
|
||||
Item_06 = "Responsabili commessa", "ca0 -0 RSP", "F"
|
||||
Item_07 = "Tipi Lavoro", "ca0 -0 TPL", "F"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user