Patch level :4.0 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :stampa bilancio di commessa; commit di sicurezza;comincia a stampare le commesse in modo "umano"


git-svn-id: svn://10.65.10.50/trunk@14140 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2006-07-10 13:27:22 +00:00
parent 013ba73b5c
commit 16ee7506d4
4 changed files with 123 additions and 35 deletions

View File

@ -11,6 +11,7 @@
#include "calib02.h"
#include "commesse.h"
#include "panapdc.h"
#include "pconana.h"
#include "saldana.h"
////////////////////////////////////////////////////////
@ -92,6 +93,46 @@ bool TPrint_bilancio_cms_mask::on_field_event(TOperable_field& o, TField_event e
TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
:TAnal_report_mask("ca3800")
{
TConfig& cfg = ca_config();
const bool use_pdcc = cfg.get_bool("UsePdcc");
const TMultilevel_code_info& pconana_info = ca_multilevel_code_info(LF_PCONANA);
const int pconana_levels = pconana_info.levels();
int prefix = cfg.get_int("PdcPrefix");
if (prefix >= pconana_levels)
prefix = pconana_levels-1;
// Controllo se voglio (e posso) usare il conto analitico come prefisso di quello contabile
if (use_pdcc && prefix > 0)
{
const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA);
const int levels = info.levels();
if (levels >= 2 && prefix < levels && esistono_riclassificazioni())
{
ca_create_fields(*this, 0, LF_PCONANA, 1, 13, F_PRE1, F_PREDES1, 0x0, PCONANA_CODCONTO);
// Nascondi i campi che non fanno parte del prefisso
for (int i = 0; i < levels; i++)
{
if (i < prefix)
{
field(F_PRE1 + i).check_type(CHECK_REQUIRED);
field(F_PRE1 + i).set_group(6);
field(F_PREDES1 + i).set_group(6);
}
else
{
field(F_PRE1 + i).hide();
field(F_PREDES1 + i).hide();
}
}
}
}
// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
// non puo' funzionare sui campi generati!!!
set_handlers();
}
///////////////////////////////////////////////////////////////
@ -100,12 +141,14 @@ TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
class TIndbil_cache : public TCache
{
bool _usepdcc;
TString80 _prefix;
protected:
virtual TObject* key2obj(const char* key);
public:
int get_indbil(const TString& conto);
void set_prefix(const char* prefix);
TIndbil_cache();
};
@ -130,10 +173,25 @@ TObject* TIndbil_cache::key2obj(const char* key)
panapdrec.put(PANAPDC_CONTO, co);
if (i == 2)
panapdrec.put(PANAPDC_SOTTOCONTO, so);
if (panapdc.read() == NOERR)
//occhio al prefisso!
panapdrec.put(PANAPDC_CODCONTO, _prefix);
if (panapdc.read(_isgteq) == NOERR)
{
conto = panapdrec.get(PANAPDC_CODCONTO);
break;
bool found = panapdrec.get_int(PANAPDC_GRUPPO) == gr;
if (found)
found = panapdrec.get_int(PANAPDC_CONTO) == (i > 0 ? co : 0);
if (found)
found = panapdrec.get_long(PANAPDC_SOTTOCONTO) == (i > 1 ? so : 0L);
if (found && _prefix.full())
found = panapdrec.get(PANAPDC_CODCONTO).starts_with(_prefix);
if (found)
{
conto = panapdrec.get(PANAPDC_CODCONTO);
break;
}
}
}
//se non trova il corrispondente conto analitico azzera il conto per il prossimo giro
@ -154,6 +212,15 @@ int TIndbil_cache::get_indbil(const TString& conto)
return ib ? atoi(*ib) : 0;
}
void TIndbil_cache::set_prefix(const char* prefix)
{
if (_prefix != prefix)
{
_prefix = prefix;
destroy();
}
}
TIndbil_cache::TIndbil_cache()
{
TConfig& cfg = ca_config();
@ -165,7 +232,7 @@ TIndbil_cache::TIndbil_cache()
///////////////////////////////////////////////////////////////
class TPrint_bilancio_cms_recordset : public TRecordset
{
TString_array _righe;
TArray _righe;
TRecnotype _curr;
TArray _colonne;
TIndbil_cache _indicatori;
@ -214,7 +281,7 @@ void TPrint_bilancio_cms_recordset::requery()
if (!_vitaintera)
query << "\nTO ANNO=" << _anno;
TISAM_recordset saldana("");
TISAM_recordset saldana(query);
for (bool ok = saldana.move_first(); ok; ok = saldana.move_next())
{
const TString& conto = saldana.get(SALDANA_CONTO).as_string();
@ -248,19 +315,20 @@ void TPrint_bilancio_cms_recordset::requery()
if (riga_array == NULL)
{
riga_array = new TAssoc_array;
cms[indice].add(chiave, riga_array);
TString4 str_indice; //l'indice va stringato per l'assoc_array
str_indice << indice;
riga_array->add("INDICE", str_indice);
riga_array->add("LEVEL", str_indice);
riga_array->add("CODCMS", codcms);
riga_array->add("FASE", fase);
riga_array->add("DESCRIZ", rec_commesse.get(COMMESSE_DESCRIZ));
//aggiunge la riga all'array-ino
cms[indice].add(chiave, riga_array);
}
} //if (datafine >= datainiesc &&...
} //if (indbil == 3 ||...
}
@ -268,11 +336,9 @@ void TPrint_bilancio_cms_recordset::requery()
_righe.destroy();
for (int i = 0; i < 4; i++)
{
const int tot = cms[i].items();
for (int j = 0; j < tot; j++)
{
// _righe.TArray::add(cms[i].remove(j));
}
TAssoc_array& a = cms[i];
FOR_EACH_ASSOC_OBJECT(a, h, k, r)
_righe.add(h->remove_obj()); // Copia nella destinazione la riga corrente
}
}
@ -285,8 +351,6 @@ const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) cons
{
if (_curr >= 0 && _curr < items())
{
TToken_string& riga = (TToken_string&)_righe.row(_curr);
if (*column_name == '#')
column_name++;
@ -294,18 +358,13 @@ const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) cons
if (strcmp(column_name, "ANNO") == 0)
{
var.set(_anno);
} else
if (strcmp(column_name, "LEVEL") == 0)
}
else
{
var.set(riga.get_int(0));
} else
if (strcmp(column_name, "CODCMS") == 0)
{
var = riga.get(1);
} else
if (strcmp(column_name, "DESCRIZ") == 0)
{
var = riga.get(2);
TAssoc_array& riga = (TAssoc_array&)_righe[_curr];
const TString* val = (TString*)riga.objptr(column_name);
if (val)
var.set(*val);
}
return var;
}
@ -315,8 +374,17 @@ const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) cons
void TPrint_bilancio_cms_recordset::set_filter(const TPrint_bilancio_cms_mask& msk)
{
//tira su un po' di parametri dalla maschera...
_anno = msk.get_int(F_ESERCIZIO);
_tipostima = msk.get_bool(F_TIPOSTIMA);
_tipostima = msk.get(F_TIPOSTIMA)[0];
_vitaintera = msk.get_bool(F_VITAINTERA);
_use_fasi = msk.get_bool(F_FASI);
//prende anche il prefix
TString80 prefix;
for (short id = F_PRE1; id <= F_PRE3 && msk.id2pos(id) > 0; id++)
prefix << msk.get(id);
_indicatori.set_prefix(prefix);
}
////////////////////////////////////////////////////////

View File

@ -12,5 +12,15 @@
#define F_VITAINTERA 109
#define F_FASI 110
//campi generati dai piani dei conti
#define F_PRE0 320
#define F_PRE1 321
#define F_PRE2 322
#define F_PRE3 323
#define F_PREDES0 324
#define F_PREDES1 325
#define F_PREDES2 326
#define F_PREDES3 327
#endif // __CA3800_H

View File

@ -17,7 +17,7 @@ ENDPAGE
PAGE "Stampa bilancio commessa" -1 -1 0 -3
GROUPBOX DLG_NULL 74 4
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 0 1 ""
END
@ -72,22 +72,33 @@ BEGIN
FLAGS "A"
END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 0 6 "@bParametri"
END
BOOLEAN F_FASI
BEGIN
PROMPT 2 7 "Esplodi Fasi"
END
RADIOBUTTON F_TIPOSTIMA 22
BOOLEAN F_VITAINTERA
BEGIN
PROMPT 2 9 "Tipo di stima"
PROMPT 20 7 "Includi esercizi successivi (vita intera)"
END
RADIOBUTTON F_TIPOSTIMA 1 22
BEGIN
PROMPT 2 8 "Tipo di stima"
FLAGS "Z"
ITEM "T|Tempo"
ITEM "C|Costi"
END
BOOLEAN F_VITAINTERA
GROUPBOX F_PRE0 76 5
BEGIN
PROMPT 2 11 "Includi esercizi successivi (vita intera)"
PROMPT 0 12 "@bPrefisso del piano dei conti analitico:"
GROUP 6
END
STRING F_REPORT 256 64

View File

@ -5,10 +5,9 @@
<section type="Head">
<font italic="1" face="Courier New" bold="1" size="9" />
<field x="1" type="Stringa" width="50" pattern="1">
<font italic="1" face="Courier New" bold="1" size="9" />
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="80" type="Data" width="10" pattern="1">
<field x="80" type="Data" width="12" pattern="1">
<source>#SYSTEM.DATE</source>
</field>
<field x="165" type="Numero" align="right" width="3" pattern="1">
@ -22,7 +21,7 @@
<field x="1" y="3.5" type="Testo" width="15" id="121" pattern="1" text="Commessa" />
</section>
<section type="Head" level="1" height="6">
<field border="1" radius="100" x="1" type="Testo" valign="center" align="center" shade_offset="25" width="167" height="2.5" text="BILANCIO DI COMMESSA &#2F; CDC PER ESERCIZIO">
<field border="1" radius="100" x="1" type="Testo" valign="center" align="center" shade_offset="25" width="167" height="2.5" text="BILANCIO DI COMMESSA PER ESERCIZIO">
<font face="Courier New" bold="1" size="16" />
</field>
<field x="1" y="3.25" type="Testo" width="12" pattern="1" text="Esercizio">