Patch level :10.0 690-692

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Modificata stima ricavi competenza (ca3900) in modo da tener conto dei saldi preventivi futuri.

Modificata bilancio di commessa (ca3800) in modo da usare detrazioni sempre a consuntivo (prima era sceglibile solo nel caso di stima a tempo)


git-svn-id: svn://10.65.10.50/trunk@20275 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-03-25 10:39:51 +00:00
parent 2ae88f40d3
commit b1b8d4831c
5 changed files with 59 additions and 51 deletions

View File

@ -104,16 +104,11 @@ RADIOBUTTON F_TIPOSTIMA 1 30
BEGIN
PROMPT 45 9 "Tipo di stima Costi\Ricavi"
ITEM "T|C prev.\R prev. (Tempo)"
MESSAGE SHOW,F_TIPODETR|ENABLE,F_TIPODETR|CLEAR,F_INCLUDE_DOCUMENTI
MESSAGE CLEAR,F_INCLUDE_DOCUMENTI
ITEM "C|C cons.\R prev."
MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR|ENABLE,F_INCLUDE_DOCUMENTI
MESSAGE ENABLE,F_INCLUDE_DOCUMENTI
ITEM "R|C cons.\R cons."
MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR|ENABLE,F_INCLUDE_DOCUMENTI
END
BOOLEAN F_TIPODETR
BEGIN
PROMPT 1 11 "Utilizzare consuntivi per le detrazioni "
MESSAGE ENABLE,F_INCLUDE_DOCUMENTI
END
GROUPBOX F_PRE0 76 5

View File

@ -208,27 +208,35 @@ int TPrint_saldana_recordset::estrai_saldi(const TRectype& saldana, const int in
case 'C': //CostiConsuntivi RicaviPreventivi (Cc/Rp)
{
if (indbil == 3) //costi
if (indbil == 3) //costi (sempre e solo consuntivi, sia righe commessa che detrazione)
{
const TImporto imp_saldo(saldana.get_char(SALDANA_SEZIONE), saldana.get_real(SALDANA_SALDO));
saldo = imp_saldo;
flag |= saldo.is_zero() ? 0 : 1;
}
else //indbil=4 ricavi
else //indbil=4 ricavi (preventivi per righe commessa, consuntivi per detrazioni)
{
const TImporto imp_saldop(saldana.get_char(SALDANA_SEZIONEP), saldana.get_real(SALDANA_SALDOP));
const TImporto imp_saldov(saldana.get_char(SALDANA_SEZIONEV), saldana.get_real(SALDANA_SALDOV));
saldop = imp_saldop;
saldop += imp_saldov;
flag |= saldop.is_zero() ? 0 : 2;
if (cms_detraz)
{
const TImporto imp_saldo(saldana.get_char(SALDANA_SEZIONE), saldana.get_real(SALDANA_SALDO));
saldo = imp_saldo;
flag |= saldo.is_zero() ? 0 : 1;
}
else
{
const TImporto imp_saldop(saldana.get_char(SALDANA_SEZIONEP), saldana.get_real(SALDANA_SALDOP));
const TImporto imp_saldov(saldana.get_char(SALDANA_SEZIONEV), saldana.get_real(SALDANA_SALDOV));
saldop = imp_saldop;
saldop += imp_saldov;
flag |= saldop.is_zero() ? 0 : 2;
}
}
}
break;
case 'T': //CostiPreventivi RicaviPreventivi (Cc/Rp) = Tempo
//nel caso stia calcolando le detrazioni di anni precedenti (cms_detraz) e si sia scelto di farlo..
//..usando i consuntivi (Adolf rikiesten)...
if (cms_detraz && _tipodetr)
//nel caso stia calcolando le detrazioni di anni precedenti (cms_detraz) va sempre preso il consuntivo!!
if (cms_detraz)
{
const TImporto imp_saldo(saldana.get_char(SALDANA_SEZIONE), saldana.get_real(SALDANA_SALDO));
saldo = imp_saldo;
@ -319,7 +327,7 @@ TAssoc_array& TPrint_saldana_recordset::get_row(TAssoc_array& cms, const char* c
//for ca3800 only!
void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array, const TString& livello,
const int indbil, const TRectype& saldana, const bool inverti, const bool cms_detraz) const
const int indbil, const TRectype& saldana, const bool is_detrazione) const
{
TString* str_imp = (TString*)riga_array.objptr(livello);
if (str_imp == NULL)
@ -335,9 +343,9 @@ void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array, const
//ci sono tutti i tipi di saldo, ma solo quelli che rientrano nei parametri iniziali..
//..verranno considerati (_tipostima,indbil)
TImporto imp_saldo, imp_saldop;
estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, cms_detraz);
estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, is_detrazione);
if (inverti) // Devo sottrarre l'importo = gli scambio la sezione
if (is_detrazione) // Se è una detrazione deve sottrarre l'importo = scambia la sezione
{
imp_saldo.swap_section();
imp_saldop.swap_section();
@ -415,8 +423,12 @@ void TPrint_saldana_recordset::incrementa_importo(TAssoc_array& riga_array,
//metodo usato solo per la stima ricavi ca3900 (_tipo=9)
void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
const int indbil, const TRectype& saldana, const bool is_detrazione) const
const int indbil, const TRectype& saldana, const int tempo) const
{
const bool is_detrazione = tempo < 0;
const bool is_prev_futuro = tempo > 0;
const bool inverti = is_detrazione;
TString8 livello;
TImporto imp_saldo, imp_saldop;
@ -427,18 +439,23 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
//..vengono posti uguali ai maturati d'ufficio
if (is_detrazione)
imp_saldop = imp_saldo;
else
{
if (is_prev_futuro)
imp_saldo.reset();
}
//saldi normali:Maturato
if (!imp_saldo.is_zero())
{
livello.format("%s_MAT", indbil == 3 ? "COS" : "RIC");
incrementa_importo(riga_array, livello, indbil, imp_saldo, is_detrazione);
incrementa_importo(riga_array, livello, indbil, imp_saldo, inverti);
}
//saldi preventivi:Budget
if (!imp_saldop.is_zero())
{
livello.format("%s_BDG", indbil == 3 ? "COS" : "RIC");
incrementa_importo(riga_array, livello, indbil, imp_saldop, is_detrazione);
incrementa_importo(riga_array, livello, indbil, imp_saldop, inverti);
}
}
@ -599,7 +616,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\nTO ANNO=" << _anno;
query << "USE SALDANA\nSELECT COMMESSA='AS09MB4RETECO'";
}
TISAM_recordset saldana_set(query);
@ -629,16 +646,14 @@ void TPrint_saldana_recordset::parse_saldana(TAssoc_array* cms, const TDate& dat
TString80 conto;
parse_bill(conto_anale, conto);
TImporto saldo, saldop;
const int flag = estrai_saldi(saldana, indbil, saldo, saldop, false);
//estrae i dati di commessa e le date relative;le date servono successivamente per stabilire...
//..le sezioni in cui compariranno le commesse nella stampa
const TString& codcms = saldana.get(SALDANA_COMMESSA);
const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
//indice: indica la sezione di report in cui apparariranno i valori!
const int indice = ricava_sezione_di_stampa(rec_commesse, datainiesc, datafinesc);
//anno sul record di saldana;serve un pò dappertutto sotto
const int anno_saldo = saldana.get_int(SALDANA_ANNO);
//e' inutile considerare le commesse terminate prima dell'esercizio selezionato..
//..cioe' nel passato oppure che iniziano nel futuro! Solo le commesse con indice non..
@ -672,15 +687,21 @@ void TPrint_saldana_recordset::parse_saldana(TAssoc_array* cms, const TDate& dat
else
{
#ifdef DBG
if (codcms == "FP08PB2202INN" && indbil == 4 && indice == 0)
if (codcms == "AS09MB4RETECO" && indice == 3)
int cazzone = 1;
#endif
TAssoc_array& riga_array = get_row(cms[indice], chiave, indice, codcms, EMPTY_STRING, EMPTY_STRING,
rec_commesse.get(COMMESSE_DESCRIZ));
//aggiunge gli importi e normalizza
aggiorna_importi(riga_array, indbil, saldana);
if (anno_saldo > _anno) // gestione saldo nel futuro
{
if (indice > 1) // considera i saldop solo se è una commessa che termina nel futuro!
aggiorna_importi(riga_array, indbil, saldana, anno_saldo - _anno);
}
else
aggiorna_importi(riga_array, indbil, saldana, 0); // gestione saldo passato e presente
}
} //if(tipo==8)
} //if (datafine >= datainiesc &&...
@ -692,8 +713,7 @@ void TPrint_saldana_recordset::parse_saldana(TAssoc_array* cms, const TDate& dat
{
//aggiorna il record speciale con la somma dei saldi con anno anteriore a quello..
//..selezionato sulla maschera (CRPA request)
const int anno = saldana.get_int(SALDANA_ANNO);
if (anno < _anno)
if (anno_saldo < _anno)
{
TString16 cazzo_cod; cazzo_cod.format("detr_al_%04d", _anno - 1);
TString cazzo_descr = "DETRAZIONE PER COMPETENZA FINO AL ";
@ -702,16 +722,16 @@ void TPrint_saldana_recordset::parse_saldana(TAssoc_array* cms, const TDate& dat
EMPTY_STRING, EMPTY_STRING, cazzo_descr);
if (_tipo == 8)
{
//cms_detr con tipo detrazione a consuntivo o preventivo in base al valore di _tipodetr
aggiorna_importo(riga_array, gruppo, indbil, saldana, true, _tipodetr);
aggiorna_importo(riga_array, conto, indbil, saldana, true, _tipodetr);
//calcolo delle detrazioni (is_detrazione = true)
aggiorna_importo(riga_array, gruppo, indbil, saldana, true);
aggiorna_importo(riga_array, conto, indbil, saldana, true);
}
else
{
aggiorna_importi(riga_array, indbil, saldana, true);
aggiorna_importi(riga_array, indbil, saldana, anno_saldo - _anno);
}
} //if(anno<_anno...
} //if(dataini<datainiesc...
} //if(indice...
} //if (indbil == 3 ||...
} //for(bool ok=saldana.move_first()..
@ -1508,11 +1528,6 @@ const TVariant& TPrint_saldana_recordset::get(const char* column_name) const
var.set(_depth);
}
else
if (strcmp(column_name, "TIPODETR") == 0)
{
var.set(_tipodetr == true ? "X" : "");
}
else
if (strcmp(column_name, "VITAINTERA") == 0)
{
var.set(_vitaintera == true ? "SI" : "NO");
@ -1639,7 +1654,6 @@ void TPrint_saldana_recordset::set_filter(const TMask& msk, const TString& curr_
_vitaintera = msk.get_bool(F_VITAINTERA);
_include_documenti = msk.get_bool(F_INCLUDE_DOCUMENTI);
_depth = msk.get_int(F_DEPTH);
_tipodetr = msk.get_bool(F_TIPODETR);
_tipostampa = msk.get_int(F_TIPOSTAMPA);
//in base al tipo di stampa selezionata setta un po' di parametri

View File

@ -79,7 +79,6 @@ class TPrint_saldana_recordset : public TRecordset
bool _vitaintera;
bool _include_documenti;
bool _tipodetr;
bool _forza_maturato;
char _tipostima;
@ -112,7 +111,7 @@ protected:
//per il solo ca3800
void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil,
const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
const TRectype& saldana, const bool is_detrazione = false) const;
real calcola_avanzamento_tempo() const;
const TDate calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const;
int ricava_sezione_di_stampa(const TRectype& rec_commesse, const TDate& datainiesc, const TDate& datafinesc) const;
@ -125,7 +124,7 @@ protected:
//per il solo ca3900
void aggiorna_importi(TAssoc_array& riga_array, const int indbil, const TRectype& saldana,
const bool is_detrazione = false) const;
const int tempo) const;
void incrementa_importo(TAssoc_array& riga_array, const TString& livello, const int indbil,
const TImporto& saldo, const bool inverti) const;

View File

@ -14,7 +14,7 @@
#define F_CDC 111
#define F_DEPTH 112
#define F_TIPOSTAMPA 113
#define F_TIPODETR 114
#define F_FORZA_MATURATO 115
#define F_INCLUDE_DOCUMENTI 116
#define F_SHOW_CMS_DESCR 117

View File

@ -100,7 +100,7 @@ bool TPrint_stima_ricavi_mask::on_field_event(TOperable_field& o, TField_event e
TPrint_stima_ricavi_mask::TPrint_stima_ricavi_mask()
:TAnal_report_mask("ca3900")
:TAnal_report_mask("ca3900")
{
TConfig& cfg = ca_config();
const bool use_pdcc = cfg.get_bool("UsePdcc");
@ -110,7 +110,7 @@ TPrint_stima_ricavi_mask::TPrint_stima_ricavi_mask()
int prefix = cfg.get_int("PdcPrefix");
if (prefix >= pconana_levels)
prefix = pconana_levels-1;
prefix = pconana_levels - 1;
// Controllo se voglio (e posso) usare il conto analitico come prefisso di quello contabile
if (use_pdcc && prefix > 0)