Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
corretta anche seconda segnalazione enrichetta (ne mancano altre 2)


git-svn-id: svn://10.65.10.50/branches/R_10_00@20861 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-09-14 15:51:36 +00:00
parent 68c7955e27
commit 87887fa7b8

@ -16,6 +16,7 @@
#include "../cg/cglib03.h"
#include "../ve/velib.h"
#include "../ve/velib04.h"
#include "ps1001.h"
#include "ps1001300a.h"
@ -127,8 +128,6 @@ protected:
void calcola_impegnato(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe); //(load()) aggiunge il valore dell'impegnato nella colonna corrispondente
TToken_string& add_rmovana(const TRectype& movana, const TRectype& rmovana, TSheet_field& sf_righe); //(load_rmovana()) metodo di basso livello..
//..per caricare fisicamente le righe sullo sheet
bool find_conto_rigadoc(const TRiga_documento& rigadoc, const char tipocf, TBill& zio) const; //trova il conto collegato ad una rigadoc e lo sbatte in zio (calcola_impegnato())
bool one_checked() const; //(on_field) controlla se nella colonna dei check ce ne è almeno 1 checkato
void check_all(const bool checked); //(on_field) checka-dechecka la colonna dei check
int find_sister_rows(const int curr_sister, int& first_sister, int& last_sister, const bool by_numreg = false); //(on_field) trova le righe..
@ -1194,76 +1193,6 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, const long max_num
}
bool TVariazione_budget_mask::find_conto_rigadoc(const TRiga_documento& rigadoc, const char tipocf, TBill& zio) const
{
int gr = 0, co = 0;
long so = 0L;
TString80 codart = rigadoc.get(RDOC_CODARTMAG);
if (codart.empty())
codart = rigadoc.get(RDOC_CODART);
if (rigadoc.is_merce())
{
//deve ricavare anche il conto attraverso il codart, sennò non riesce a completare la chiave dello sheet
const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart);
if (!rec_anamag.empty())
{
if (tipocf == 'F')
{
gr = rec_anamag.get_int(ANAMAG_GRUPPOA);
co = rec_anamag.get_int(ANAMAG_CONTOA);
so = rec_anamag.get_long(ANAMAG_SOTTOCA);
}
else
{
gr = rec_anamag.get_int(ANAMAG_GRUPPOV);
co = rec_anamag.get_int(ANAMAG_CONTOV);
so = rec_anamag.get_long(ANAMAG_SOTTOCV);
}
}
} else
if (rigadoc.is_prestazione())
{
const TRectype& rec_tab_prs = cache().get("PRS", codart);
if (!rec_tab_prs.empty())
{
if (tipocf == 'F')
{
gr = rec_tab_prs.get_int("I3");
co = rec_tab_prs.get_int("I4");
so = rec_tab_prs.get_long("I5");
}
else
{
gr = rec_tab_prs.get_int("I0");
co = rec_tab_prs.get_int("I1");
so = rec_tab_prs.get_long("I2");
}
}
}
if (so <= 0 && codart.find('*') > 0)
{
TToken_string cazzo_codart(codart, '*');
gr = cazzo_codart.get_int(0);
co = cazzo_codart.get_int(1);
so = cazzo_codart.get_long(2);
}
//se il conto non è completo non può riuscire a piazzare il valore dell'impegnato in una riga dello sheet..
//..in quanto la chiave di riga risulta comunque incompleta nel conto! Quindi prosegue con la riga dopo
if (so <= 0)
return false;
else
{
zio.set(gr, co, so);
return true;
}
}
void TVariazione_budget_mask::calcola_impegnato(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe)
{
@ -1355,94 +1284,60 @@ void TVariazione_budget_mask::calcola_impegnato(const TString& cms, const bool i
if (!doc.is_ordine())
continue;
const char tipocf = doc.tipocf();
//contabilizza l'ordine in finto movimento di analitica in modo da riprodurre il funzionamento..
//..del mitico rendiconto, lo Zeus dei programmi di analitica; in questo modo sistema tutti i problemi..
//..che vengono creati dalle righe di casse profesionali, irap, inps e cazzi simili
TContabilizzazione_analitica cont_anal;
TAnal_mov finto_movana;
cont_anal.elabora(doc, 0L, NULL, false, finto_movana, false);
//analizza il finto movana riga x riga
const int anal_rows = finto_movana.rows();
for (int j = 1; j <= anal_rows; j++)
{
const TRectype& riga_finto_movana = finto_movana.body()[j];
//dalla riga analitica estrae i dati che servono per posizionare i valori nello sheet
const TString80 rmovana_cms = riga_finto_movana.get(RMOVANA_CODCMS);
const TString& codcaus = doc.tipo().causale();
const int caus_anno = doc.get_int(DOC_ANNO);
TCausale caus(codcaus, caus_anno);
const TipoIVA tiva = caus.iva();
//il documento virtuale è adesso un ordine non evaso
//tarocchiamo il documento prendendo solo le righe non evase (almeno una ci sarà, perchè la query del recordset..
//..richiedeva che la rigadoc fosse non evasa, quindi quella riga nel doc esiste, magari in compagnia di altre)
FOR_EACH_PHYSICAL_RDOC(doc, r, rigadoc_ptr)
{
TRiga_documento& rigadoc = *rigadoc_ptr;
//trattamento delle righe non evase di tipo merce o prestazione
if (rigadoc.is_merce() || rigadoc.is_prestazione() || rigadoc.is_spese())
//la riga è buona solo se ha commessa valida, ovvero quella selezionata o una di supporto
if (_cms_supporto.get_pos(rmovana_cms) >= 0)
{
const TString80 rigadoc_cms = rigadoc.codice_commessa();
if (_cms_supporto.get_pos(rigadoc_cms) >= 0) //deve avere commessa valida!!!
const TString80 rmovana_cdc = riga_finto_movana.get(RMOVANA_CODCCOSTO);
TString16 rmovana_fase = riga_finto_movana.get(RMOVANA_CODFASE);
//la fase potrebbe non esserci!
if (_exclude_fasi)
rmovana_fase.cut(0);
TString80 rmovana_conto = riga_finto_movana.get(RMOVANA_CODCONTO);
const char rmovana_sez = riga_finto_movana.get_char(RMOVANA_SEZIONE);
const real rmovana_valore = riga_finto_movana.get_real(RMOVANA_IMPORTO);
//se l'importo è nullo è inutile perdere tempo
if (rmovana_valore.is_zero())
continue;
//cerca una riga con la medesima chiave sullo sheet
int index = trova_riga_sullo_sheet(sf_righe, rmovana_cms, rmovana_cdc, rmovana_conto, rmovana_fase);
if (index < 0 && rmovana_conto.full())
{
//è inutile fare un sacco di conti su una riga senza valore!
real valore = rigadoc.importo(true, false);
if (valore.is_zero())
continue;
//attenzione alle indetraibilità IVA!!!! (Enrichetta 14/09/2010)
//va sommata all'importo la % dovuta all'iva
if (tiva != iva_vendite)
{
const TString4 tipodet = rigadoc.get(RDOC_TIPODET);
int td;
const real pind = indetraibile_al(tipodet, caus, caus_anno, td);
if (pind > ZERO)
{
const real ivaind = (rigadoc.imposta(false) * pind) / CENTO;
valore += ivaind;
valore.round(2);
}
}
TString16 rigadoc_conto, rigadoc_fase;
TString80 rigadoc_cdc;
//se la riga è di tipo spese (quindi non ha un conto associabile che ci permetta di posizionarne l'importo sullo..
//..sheet, in quanto la chiave sarebbe incompleta del conto) si provvede ad associarla all'ultima riga buona del documento..
//..in esame
if (rigadoc.is_spese())
{
rigadoc_conto = last_conto;
rigadoc_cdc = last_cdc;
if (!_exclude_fasi)
rigadoc_fase = last_fase;
}
else
{
//deve ricavare anche il conto attraverso il codart, sennò non riesce a completare la chiave dello sheet
TBill zio;
if (find_conto_rigadoc(rigadoc, tipocf, zio))
{
rigadoc_conto.format("%03d%03d%06ld", zio.gruppo(), zio.conto(), zio.sottoconto());
//cdc
rigadoc_cdc = rigadoc.codice_costo();
//eventuale fase
if (!_exclude_fasi)
rigadoc_fase = rigadoc.fase_commessa();
}
}
//cerca una riga con la medesima chiave sullo sheet
const int index = trova_riga_sullo_sheet(sf_righe, rigadoc_cms, rigadoc_cdc, rigadoc_conto, rigadoc_fase);
if (index >= 0)
{
TToken_string& row = sf_righe.row(index);
add_rmovana(finto_movana, riga_finto_movana, sf_righe);
index = sf_righe.items()-1;
}
if (index >= 0)
{
TToken_string& row = sf_righe.row(index);
#ifdef DBG
if (rigadoc_conto == "004001000053")
int cazzone = 1;
if (rmovana_conto == "004001000053")
int cazzone = 1;
#endif
real row_valore_impegnato = row.get(_pos_ipg);
row_valore_impegnato += valore;
row.add(row_valore_impegnato.string(), _pos_ipg);
last_conto = rigadoc_conto;
last_cdc = rigadoc_cdc;
last_fase = rigadoc_fase;
}
} //if (rigadoc.codice_commessa()...
} //if (rigadoc.is_merce()
} //for (int r = doc.body().last_row()
real row_valore_impegnato = row.get(_pos_ipg);
row_valore_impegnato += rmovana_valore;
row.add(row_valore_impegnato.string(), _pos_ipg);
last_conto = rmovana_conto;
last_cdc = rmovana_cdc;
last_fase = rmovana_fase;
}
} //if(_cms_supporto.get_pos(rmovana_cms) >= 0)
} //for (int j = 1; j <= anal_rows; j++)
} //if (numregca == 0)...
} //for (bool ok = recset.move_first()...
} //for (int n = 0...