Eliminati automatismi su movimenti trasferit da AS/400

git-svn-id: svn://10.65.10.50/trunk@2646 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-02-27 11:32:35 +00:00
parent beb6376b71
commit 5d08350c49
4 changed files with 105 additions and 44 deletions

@ -273,7 +273,8 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (iva == nessuna_iva)
{
m->enable(F_PROVVISORIO, !_is_saldaconto); // Il saldaconto vieta i movimenti provvisori
m->show(SK_TIPORIGA, is_pagamento());
m->show(SK_TIPORIGA, is_pagamento()); // Abilita scelta tipo riga
m->enable(SK_TIPORIGA);
}
else
{
@ -602,13 +603,38 @@ void TPrimanota_application::init_insert_mode(TMask& m)
}
_saldi.reset(); // Inizializza saldi
_as400 = FALSE; // Un movimento nuovo non puo' essere trasferito da AS400
}
void TPrimanota_application::init_modify_mode(TMask& m)
{
init_mask(m);
{
init_mask(m); // Inizializzazione standard
calcola_saldo(); // Verifica eventuali sbilanci contabili
// Determina se il movimento e' stato trasferito da AS/400:
// praticamente controlla che non ci sia nessun tipo movimento sulle righe contabili.
_as400 = FALSE;
if (is_saldaconto() || iva() != nessuna_iva)
{
TSheet_field& cg = cgs();
if (cg.items() > 0)
{
_as400 = TRUE;
for (int i = cg.items()-1; i >= 0 && _as400; i--)
{
const char rt = row_type(cg.row(i));
_as400 = rt <= ' ';
}
}
}
if (_as400 && is_pagamento())
{
m.set(SK_TIPORIGA, "A"); // Forza il tipo riga normale
m.disable(SK_TIPORIGA); // Disabilita la sua modifica
}
}
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE)

@ -442,14 +442,12 @@ bool TPrimanota_application::ci_sono_importi() const
real TPrimanota_application::calcola_saldo() const
{
real tdare, tavere;
TImporto saldaconto;
const bool pag = is_pagamento() && !_as400;
TString_array& rows = cgs().rows_array();
const int max = rows.items();
TImporto saldaconto;
const bool pag = is_pagamento();
real tdare, tavere;
for (int i = 0; i < max; i++)
{
TToken_string& r = rows.row(i);
@ -550,6 +548,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (saldo != ZERO)
{
const char* ss = saldo.string(".");
if (*ss == '-') ss++;
return f.error_box("Il movimento e' sbilanciato di %s lire.", ss);
}
@ -583,11 +582,16 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (paga || nota)
{
const char tipo = row_type(r);
if (tipo == 'K' || tipo == 'T')
if (tipo == 'K' || tipo == 'T' || a._as400)
{
const int currig = i+1;
const TImporto speso = a.partite().importo_speso(numreg, currig);
if (importo != speso)
bool errato = importo != speso;
if (errato && a._as400 && speso.is_zero())
errato = FALSE;
if (errato)
{
TString msg(128);
msg << "L'importo sulla riga " << currig << " deve essere "
@ -617,9 +621,8 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (empty)
return f.error_box("Il movimento non ha nessuna riga contabile con un importo");
if (paga || nota)
if ((paga || nota) && !a._as400)
{
const char sez(a.causale().sezione(2));
const TImporto totdoc(sez, m.get_real(F_TOTALE));
@ -676,14 +679,14 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
void TPrimanota_application::generazione_righe_cg(int r)
{
begin_wait();
TSheet_field& cg = cgs();
TToken_string& row = cg.row(r);
if (can_remove(row)) // Ignora righe senza importo
return;
begin_wait();
TImporto importo; importo = row;
const bool causale_ok = causale().codice()[0] > ' ';
@ -997,6 +1000,8 @@ TSheet_field& TPrimanota_application::pags() const
// Gestione sheet IVA
///////////////////////////////////////////////////////////
// Ritorna lo sheet delle righe IVA
// Certified 100%
TSheet_field& TPrimanota_application::ivas() const
{
TSheet_field& s = (TSheet_field&)_msk[2]->field(F_SHEETIVA);
@ -1016,6 +1021,8 @@ TBill& TPrimanota_application::ivas_bill(TBill& c)
return c;
}
// Gestione del campo imponibile sullo sheet iva
// Certified 90%
bool TPrimanota_application::imponibile_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.dirty())
@ -1041,6 +1048,8 @@ bool TPrimanota_application::imponibile_handler(TMask_field& f, KEY key)
}
// Gestione del codice IVA sullo sheet iva
// Certified 90%
bool TPrimanota_application::codiva_handler(TMask_field& f, KEY key)
{
if (!suspended_handler(f, key))
@ -1079,6 +1088,8 @@ bool TPrimanota_application::codiva_handler(TMask_field& f, KEY key)
return TRUE;
}
// Gestione del codice detrazione sullo sheet iva
// Certified 90%
bool TPrimanota_application::detrazione_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.dirty() && app().iva() == iva_acquisti)
@ -1090,6 +1101,8 @@ bool TPrimanota_application::detrazione_handler(TMask_field& f, KEY key)
return TRUE;
}
// Gestione del campo imposta sullo sheet iva
// Certified 90%
bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
{
if ((key == K_ENTER || key == K_TAB) && f.dirty())
@ -1154,7 +1167,9 @@ real TPrimanota_application::calcola_imp() const
return imponibili+imposte;
}
// Elimina dallo sheet le righr iva senza importi (imponibile e imposta)
// Certified 99%
void TPrimanota_application::ivas_pack()
{
TString_array& rows = ivas().rows_array();
@ -1179,8 +1194,11 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
static int oldpos,oldposiva;
static real oldimp, oldiva;
TToken_string& row = iva.row(r);
TPrimanota_application& a = app();
if (a._as400)
return TRUE;
TToken_string& row = iva.row(r);
const TCausale& cau = a.causale();
if (k == K_SPACE)
@ -1518,31 +1536,32 @@ bool TPrimanota_application::num_handler(TMask_field& f, KEY key)
TMask& m = f.mask();
const long num = atol(f.get());
if (key == K_TAB && m.is_running() && num > 0)
{
const long max = app()._lastreg+1;
{
TPrimanota_application& a = app();
const long max = a._lastreg+1;
app()._skip_giornale_check = FALSE;
app()._skip_bollato_check = FALSE;
a._skip_giornale_check = FALSE;
a._skip_bollato_check = FALSE;
if (num < max)
{
if (app().find(1))
if (a.find(1))
{
const TLocalisamfile& mov = app()._rel->lfile();
const TLocalisamfile& mov = a._rel->lfile();
bool ok = TRUE;
if (mov.get_bool("STAMPATO"))
{
ok = yesno_box("Il movimento e' gia' stato stampato sul libro giornale:\n"
"si desidera continuare ugualmente");
app()._skip_giornale_check = ok;
a._skip_giornale_check = ok;
}
if (ok && mov.get_bool("REGST"))
{
ok = yesno_box("Il movimento e' gia' stato stampato sul bollato:\n"
"si desidera continuare ugualmente");
app()._skip_bollato_check = ok;
a._skip_bollato_check = ok;
}
if (ok && mov.get_bool("INVIATO"))
@ -1651,12 +1670,13 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (key == K_ENTER || f.focusdirty())
{
TPrimanota_application& a = app();
const long numreg = m.get_long(F_NUMREG);
const bool error = numreg == 0 || numreg > app()._lastreg;
const bool error = numreg == 0 || numreg > a._lastreg;
if (key != K_ENTER && !app()._skip_giornale_check)
{
const TLibro_giornale& gio = app().giornale();
const TLibro_giornale& gio = a.giornale();
if (dr < gio.last_print())
{
f.error_box("La data dell'operazione e' antecedente al %s,\n"
@ -1671,22 +1691,22 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
}
if (m.query_mode())
app().read_caus(m.get(F_CODCAUS), dr.year());
a.read_caus(m.get(F_CODCAUS), dr.year());
TRegistro& reg = app().causale().reg();
const TString16 codreg(reg.name());
TRegistro& reg = a.causale().reg();
const TString codreg(reg.name());
if (codreg.not_empty())
{
if (reg.year() != dr.year())
{
const bool ok = reg.read(codreg, dr.year());
if (!ok) return FALSE;
app().read_caus(NULL, 0);
if (app().iva() != nessuna_iva)
a.read_caus(NULL, 0);
if (a.iva() != nessuna_iva)
m.field(F_CODREG).on_hit();
}
if (!app()._skip_bollato_check)
if (!a._skip_bollato_check)
{
if (dr < reg.last_print())
{
@ -1701,7 +1721,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
reg.last_reg().string(), (const char*)codreg, dr.year());
}
if (reg.iva() != nessuna_iva && app()._rel->controlla_liquidazione(dr, reg) == TRUE)
if (reg.iva() != nessuna_iva && a._rel->controlla_liquidazione(dr, reg) == TRUE)
{
const char* const mese = itom(dr.month());
f.warning_box("La liquidazione IVA relativa al mese di %s e' gia' stata calcolata", mese);
@ -1745,7 +1765,7 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
const int pr = esc.pred(ar); // Esercizio precedente
if (ae != ar && ae != pr)
{
TString80 e;
TString e(80);
e << "La data " << data << " deve appartenere all'esercizio " << ar;
if (pr > 0) e << " o al " << pr;
return f.error_box(e);
@ -1786,7 +1806,7 @@ bool TPrimanota_application::numdoc_handler(TMask_field& f, KEY key)
TMask& m = f.mask();
if (key == K_TAB && f.to_check(key, TRUE) && m.insert_mode() && app().is_saldaconto())
{
const TString16 n = f.get();
const TString n = f.get();
if (n.not_empty() && !app().npart_is_prot()) // Copiare numero documento nel numero partita?
{
if (m.field(F_NUMRIF).active() && m.get(F_NUMRIF).blank())
@ -1914,9 +1934,13 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
}
}
// Creazione/Aggiornamento riga totale
const real tot(m.get(F_TOTALE));
set_cgs_row(riga_totale, real2imp(tot, 'T'), nuovo, m.get(F_DESCR), 'T');
if (!_as400)
{
// Creazione/Aggiornamento riga totale
const real tot(m.get(F_TOTALE));
set_cgs_row(riga_totale, real2imp(tot, 'T'), nuovo, m.get(F_DESCR), 'T');
}
calcola_imp(); // Ricalcola totale IVA
calcola_saldo(); // Ricalcola sbilanci
}
@ -2208,7 +2232,10 @@ bool TPrimanota_application::totdocval_handler(TMask_field& f, KEY key)
// Aggiunge o aggiorna la riga delle ritenute fiscali o sociali
// Certified 99%
void TPrimanota_application::add_cgs_rit(bool fiscali)
{
{
if (_as400)
return;
TMask& m = curr_mask();
const real imp(m.get(fiscali ? F_RITFIS : F_RITSOC)); // Determina importo
@ -2220,7 +2247,7 @@ void TPrimanota_application::add_cgs_rit(bool fiscali)
{ // crea una nuova riga di ritenute
const int riga = fiscali ? RIGA_RITENUTE_FISCALI : RIGA_RITENUTE_SOCIALI;
TBill conto; causale().bill(riga, conto);
const TString80 desc(causale().desc_agg(riga));
const TString desc(causale().desc_agg(riga));
set_cgs_row(-1, real2imp(imp, tipo), conto, desc, tipo);
}
}

@ -56,6 +56,7 @@ class TPrimanota_application : public TRelation_application
TMask* _msk[4]; // Maschere di query, cg, iva, occasionali
long _lastreg; // Numero ultima registrazione
int _mode; // Modo maschera corrente
bool _as400; // Movimento trasferito da as400?
TDate _last_dreg; // Ultima data registrazione inserita
TDate _last_dcom; // Ultima data competenza inserita

@ -996,7 +996,9 @@ bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
const char tipo = m.get(CG_ROWTYPE)[0];
const bool is_nota = tipo == 'T' && a.causale().tipomov() == 2 && cm.field(F_NUMRIF).active();
if (tipo == 'K' || is_nota)
const bool tras = a._as400 && a.causale().tipomov() > 1 && m.get(CG_TIPO).not_empty();
if (tipo == 'K' || is_nota || tras)
{
TSheet_field& s = *m.get_sheet();
const int riga = s.selected();
@ -1047,6 +1049,9 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
const TRiga_partite& somma = p.riga(nrigp);
const int riga_contabile = somma.get_int(PART_NUMRIG); // Riga movimento
TSheet_field& sheet = cgs();
if (_as400)
deleting = -1; // Ignora contropartite
if (deleting >= 0)
{
@ -1105,7 +1110,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
if (empty) sheet.destroy(riga);
}
}
} // if (deleting != 0)
} // if (deleting >= 0)
char old_ap, new_ap;
TImporto old_abbuono, new_abbuono, old_diffcam, new_diffcam;
@ -1265,11 +1270,13 @@ bool TPrimanota_application::notify_cgline_deletion(TPartita& partita, long nreg
}
bool TPrimanota_application::notify_cgline_deletion(int numrig)
{
{
bool found = FALSE;
const long nreg = curr_mask().get_long(F_NUMREG);
partite().add_numreg(nreg);
for (TPartita* game = partite().first(); game; game = partite().next())
found |= notify_cgline_deletion(*game, nreg, numrig);
return found;
}