Patch level : 10.0 1158
Files correlati : fe0.exe Ricompilazione Demo : [ ] Commento : Migliorata gestione note di variazione a fatture con contratto Migliorata gestione flag di forzatura git-svn-id: svn://10.65.10.50/branches/R_10_00@22503 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ae155f5dbb
commit
5dcf051f0a
195
fe/fe0100.cpp
195
fe/fe0100.cpp
@ -269,7 +269,7 @@ public:
|
|||||||
int items() const { return _data.items(); }
|
int items() const { return _data.items(); }
|
||||||
const TRectype& operator[](int i) { return (const TRectype&)_data[i]; }
|
const TRectype& operator[](int i) { return (const TRectype&)_data[i]; }
|
||||||
TExclusion_mode add(const TRectype& alleg, bool send_all, TLog_report& log);
|
TExclusion_mode add(const TRectype& alleg, bool send_all, TLog_report& log);
|
||||||
void add(const TArray& note, bool send_all, TLog_report& log);
|
void add(TArray& fatture, TArray& note, bool send_all, TLog_report& log);
|
||||||
};
|
};
|
||||||
|
|
||||||
TExclusion_mode TDati_rilevanti_array::segnala_riga(const TRectype& alleg, TExclusion_mode motivo, TLog_report& log) const
|
TExclusion_mode TDati_rilevanti_array::segnala_riga(const TRectype& alleg, TExclusion_mode motivo, TLog_report& log) const
|
||||||
@ -302,84 +302,43 @@ TExclusion_mode TDati_rilevanti_array::add(const TRectype& alleg, bool send_all,
|
|||||||
if (a.codice_fiscale().blank() && a.partita_IVA().blank())
|
if (a.codice_fiscale().blank() && a.partita_IVA().blank())
|
||||||
return segnala_riga(alleg, em_no_allegato, log);
|
return segnala_riga(alleg, em_no_allegato, log);
|
||||||
|
|
||||||
const TString80 contratto = alleg.get(ALL_CONTRATTO);
|
if (is_nota_variazione(alleg))
|
||||||
const TString8 numrett = alleg.get(ALL_NUMRETT);
|
|
||||||
if (contratto.full() || numrett.full())
|
|
||||||
{
|
{
|
||||||
TString16 curr_idcf = alleg.get(ALL_OCFPI);
|
const TString8 numrett = alleg.get(ALL_NUMRETT);
|
||||||
if (curr_idcf.blank()) curr_idcf = alleg.get(ALL_CODCF);
|
// Ignora le note di variazione non collegate e di importo non rilevante
|
||||||
TRectype* sum = NULL;
|
if (!send_all && ignora == em_incluso)
|
||||||
for (int i = _data.last(); i >= 0; i--)
|
|
||||||
{
|
{
|
||||||
TRectype& rec = (TRectype&)_data[i];
|
const int anno = alleg.get_int(ALL_ANNO);
|
||||||
TString16 idcf = rec.get(ALL_OCFPI);
|
const real importo = abs(alleg.get_real(ALL_IMPORTO));
|
||||||
if (idcf.blank()) idcf = rec.get(ALL_CODCF);
|
if (importo < importo_limite(anno))
|
||||||
if (idcf == curr_idcf)
|
ignora = segnala_riga(alleg, em_importo_limite, log);
|
||||||
{
|
|
||||||
if ((numrett.full() && numrett == rec.get(ALL_NUMDOC)) ||
|
|
||||||
(contratto.full() && contratto == rec.get(ALL_CONTRATTO)))
|
|
||||||
{
|
|
||||||
sum = &rec;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
break;
|
{
|
||||||
|
const TDate datarett = alleg.get(ALL_DATARETT);
|
||||||
|
if (datarett.year() != anno)
|
||||||
|
return segnala_riga(alleg, em_data_limite, log); // Non posso fare la add con DATARETT errata
|
||||||
|
|
||||||
|
if (numrett.blank() || numrett == INVALID_NUMDOC)
|
||||||
|
return segnala_riga(alleg, em_altro, log); // Non posso fare la add in assenza di NUMRETT
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sum != NULL)
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TString80 contratto = alleg.get(ALL_CONTRATTO);
|
||||||
|
if (ignora <= em_importo_limite)
|
||||||
{
|
{
|
||||||
sum->add(ALL_IMPORTO, importo);
|
const int anno = alleg.get_int(ALL_ANNO);
|
||||||
sum->add(ALL_IMPOSTA, imposta);
|
TExclusion_mode new_mode = (alleg.get_real(ALL_IMPORTO) < importo_limite(anno)) ? em_importo_limite : em_incluso;
|
||||||
|
if (new_mode == em_importo_limite && contratto.full())
|
||||||
if (contratto.full()) // In caso di contratto riporta i dati dell'ultimo documento
|
|
||||||
{
|
{
|
||||||
const TDate sum_data = sum->get(ALL_DATAREG);
|
const TContratto c(alleg);
|
||||||
const TDate all_data = alleg.get(ALL_DATAREG);
|
real imp, iva;
|
||||||
if (all_data > sum_data)
|
if (c.totale_annuale(anno, imp, iva))
|
||||||
{
|
new_mode = (imp < importo_limite(anno)) ? em_importo_limite : em_incluso;
|
||||||
sum->put(ALL_DATAREG, all_data);
|
|
||||||
sum->put(ALL_NUMDOC, alleg.get(ALL_NUMDOC));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const int old_mode = sum->get_int(ALL_IGNORA);
|
|
||||||
if (old_mode <= 1)
|
|
||||||
{
|
|
||||||
const int anno = sum->get_int(ALL_ANNO);
|
|
||||||
int new_mode = sum->get_real(ALL_IMPORTO) < importo_limite(anno);
|
|
||||||
|
|
||||||
if (new_mode && contratto.full())
|
|
||||||
{
|
|
||||||
const TContratto c(alleg);
|
|
||||||
real imp, iva;
|
|
||||||
if (c.totale_annuale(anno, imp, iva))
|
|
||||||
new_mode = imp < importo_limite(anno);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (old_mode != new_mode)
|
|
||||||
sum->put(ALL_IGNORA, new_mode);
|
|
||||||
}
|
|
||||||
return em_incluso; // Aggiunto a record preesistente
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Ignora le note di variazione non collegate e di importo non rilevante
|
|
||||||
if (!send_all && ignora == em_incluso && is_nota_variazione(alleg))
|
|
||||||
{
|
|
||||||
const int anno = alleg.get_int(ALL_ANNO);
|
|
||||||
const real importo = abs(alleg.get_real(ALL_IMPORTO));
|
|
||||||
if (importo < importo_limite(anno))
|
|
||||||
ignora = segnala_riga(alleg, em_importo_limite, log);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const TDate datarett = alleg.get(ALL_DATARETT);
|
|
||||||
if (datarett.year() != anno)
|
|
||||||
return segnala_riga(alleg, em_data_limite, log); // Non posso fare la add con DATARETT errata
|
|
||||||
|
|
||||||
const TString& nr = alleg.get(ALL_NUMRETT);
|
|
||||||
if (nr.blank() || nr == INVALID_NUMDOC)
|
|
||||||
return segnala_riga(alleg, em_altro, log); // Non posso fare la add in assenza di NUMRETT
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (ignora != new_mode)
|
||||||
|
ignora = new_mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,11 +350,68 @@ TExclusion_mode TDati_rilevanti_array::add(const TRectype& alleg, bool send_all,
|
|||||||
return em_incluso;
|
return em_incluso;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDati_rilevanti_array::add(const TArray& note, bool send_all, TLog_report& log)
|
void TDati_rilevanti_array::add(TArray& fatture, TArray& note, bool send_all, TLog_report& log)
|
||||||
{
|
{
|
||||||
FOR_EACH_ARRAY_ITEM(note, t, obj)
|
// Cerca di scalare le note dalle relative fatture
|
||||||
|
FOR_EACH_ARRAY_ITEM_BACK(note, n, pnota)
|
||||||
{
|
{
|
||||||
const TRectype& nota = *(const TRectype*)obj;
|
const TRectype& nota = *(const TRectype*)pnota;
|
||||||
|
const TString8 numrett = nota.get(ALL_NUMRETT);
|
||||||
|
if (numrett.full() && numrett != INVALID_NUMDOC)
|
||||||
|
{
|
||||||
|
const TDate datarett = nota.get(ALL_DATARETT);
|
||||||
|
FOR_EACH_ARRAY_ITEM(fatture, f, pfatt)
|
||||||
|
{
|
||||||
|
TRectype& fatt= *(TRectype*)pfatt;
|
||||||
|
if (fatt.get(ALL_NUMDOC) == numrett && fatt.get_date(ALL_DATAREG) == datarett)
|
||||||
|
{
|
||||||
|
fatt.add(ALL_IMPORTO, nota.get_real(ALL_IMPORTO));
|
||||||
|
fatt.add(ALL_IMPOSTA, nota.get_real(ALL_IMPOSTA));
|
||||||
|
note.destroy(n);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Cerca di raggruppare le fatture per contratto
|
||||||
|
FOR_EACH_ARRAY_ITEM_BACK(fatture, c, pcont)
|
||||||
|
{
|
||||||
|
const TRectype& cont = *(const TRectype*)pcont;
|
||||||
|
const TString80 contratto = cont.get(ALL_CONTRATTO);
|
||||||
|
if (contratto.full())
|
||||||
|
{
|
||||||
|
FOR_EACH_ARRAY_ITEM(fatture, f, pfatt) if (f < c)
|
||||||
|
{
|
||||||
|
TRectype& fatt= *(TRectype*)pfatt;
|
||||||
|
if (fatt.get(ALL_CONTRATTO) == contratto)
|
||||||
|
{
|
||||||
|
fatt.add(ALL_IMPORTO, cont.get_real(ALL_IMPORTO));
|
||||||
|
fatt.add(ALL_IMPOSTA, cont.get_real(ALL_IMPOSTA));
|
||||||
|
|
||||||
|
const TDate sum_data = fatt.get(ALL_DATAREG);
|
||||||
|
const TDate all_data = cont.get(ALL_DATAREG);
|
||||||
|
if (all_data > sum_data)
|
||||||
|
{
|
||||||
|
fatt.put(ALL_DATAREG, all_data);
|
||||||
|
fatt.put(ALL_NUMDOC, cont.get(ALL_NUMDOC));
|
||||||
|
}
|
||||||
|
fatture.destroy(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggiunge fatture
|
||||||
|
FOR_EACH_ARRAY_ITEM(fatture, f, pfatt)
|
||||||
|
{
|
||||||
|
const TRectype& fatt = *(const TRectype*)pfatt;
|
||||||
|
add(fatt, send_all, log);
|
||||||
|
}
|
||||||
|
// Aggiunge note
|
||||||
|
FOR_EACH_ARRAY_ITEM(note, n, pnot)
|
||||||
|
{
|
||||||
|
const TRectype& nota = *(const TRectype*)pnot;
|
||||||
add(nota, send_all, log);
|
add(nota, send_all, log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1164,7 +1180,7 @@ bool TDati_rilevanti_msk::send_alleg()
|
|||||||
const TRectype& rec = alleg.cursor()->curr();
|
const TRectype& rec = alleg.cursor()->curr();
|
||||||
|
|
||||||
TString16 last_clifo;
|
TString16 last_clifo;
|
||||||
TArray note;
|
TArray fatt, note;
|
||||||
|
|
||||||
TProgind pi(tot_alleg, TR("Elaborazione file"));
|
TProgind pi(tot_alleg, TR("Elaborazione file"));
|
||||||
for (bool ok = alleg.move_first(); ok; ok = alleg.move_next())
|
for (bool ok = alleg.move_first(); ok; ok = alleg.move_next())
|
||||||
@ -1178,19 +1194,21 @@ bool TDati_rilevanti_msk::send_alleg()
|
|||||||
|
|
||||||
if (clifo != last_clifo)
|
if (clifo != last_clifo)
|
||||||
{
|
{
|
||||||
if (clifo == "833")
|
if (!fatt.empty() || !note.empty())
|
||||||
int caaozne = 1;
|
{
|
||||||
data.add(note, send_all, *_log);
|
data.add(fatt, note, send_all, *_log);
|
||||||
note.destroy();
|
fatt.destroy();
|
||||||
|
note.destroy();
|
||||||
|
}
|
||||||
last_clifo = clifo;
|
last_clifo = clifo;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_nota_variazione(rec))
|
if (is_nota_variazione(rec))
|
||||||
note.add(rec);
|
note.add(rec);
|
||||||
else
|
else
|
||||||
data.add(rec, send_all, *_log);
|
fatt.add(rec);
|
||||||
}
|
}
|
||||||
data.add(note, send_all, *_log);
|
data.add(fatt, note, send_all, *_log);
|
||||||
|
|
||||||
if (_log->recordset()->items())
|
if (_log->recordset()->items())
|
||||||
_log->preview();
|
_log->preview();
|
||||||
@ -1517,6 +1535,7 @@ void TDati_rilevanti_msk::enable_buttons()
|
|||||||
}
|
}
|
||||||
|
|
||||||
enable(DLG_CANCEL, full_rows);
|
enable(DLG_CANCEL, full_rows);
|
||||||
|
enable(DLG_SAVEREC, _sheet_dirty);
|
||||||
enable(DLG_EXPORT, full_rows);
|
enable(DLG_EXPORT, full_rows);
|
||||||
enable(DLG_RECALC, !full_rows && good_year && !one_sent);
|
enable(DLG_RECALC, !full_rows && good_year && !one_sent);
|
||||||
enable(DLG_ELABORA, good_year && !(one_sent && def));
|
enable(DLG_ELABORA, good_year && !(one_sent && def));
|
||||||
@ -1667,9 +1686,7 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
|
|||||||
if (e == se_notify_modify)
|
if (e == se_notify_modify)
|
||||||
{
|
{
|
||||||
set_dirty( true);
|
set_dirty( true);
|
||||||
TSheet_field& s = (TSheet_field&)o;
|
enable_buttons();
|
||||||
TToken_string& row = s.row(jolly);
|
|
||||||
row.add("X", s.cid2index(A_FORZATA));
|
|
||||||
} else
|
} else
|
||||||
if (e == se_query_add)
|
if (e == se_query_add)
|
||||||
{
|
{
|
||||||
@ -1720,6 +1737,14 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (e == fe_modify && jolly == 1)
|
||||||
|
{
|
||||||
|
const short id = o.dlg();
|
||||||
|
if (id >= A_RIGA && id < A_COFI && id != A_FORZATA)
|
||||||
|
o.mask().set(A_FORZATA, true);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user