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:
parent
68c7955e27
commit
87887fa7b8
205
ps/ps1001300.cpp
205
ps/ps1001300.cpp
@ -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...
|
||||
|
Loading…
x
Reference in New Issue
Block a user