campo-sirio/ba/ba3100.cpp
guy dcd9df026d ba*.cpp Tolti include inutili
ba3500.cpp Corretta creazione della prima unita' locale
ba610?.cpp Corretti vari errori segnalati sul fax dalla Cecilia


git-svn-id: svn://10.65.10.50/trunk@5668 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-11-27 11:14:52 +00:00

485 lines
14 KiB
C++
Executable File

#include <config.h>
#include <printer.h>
#include <tabapp.h>
#include "../cg/cglib03.h"
#include "batbreg.h"
#include "batbcam.h"
#include "batbdel.h"
#include "batbver.h"
#define REG_JOURNAL 5
#define TAB_VERSAMENTI "%VER"
class TGeneric_table_app : public Tab_application
{
long _oldditta;
int _oldanno;
bool _exist_journal;
bool _stampa_intest;
// ------------- specifiche tabella versamenti ed interessi IVA
TTable* _ver;
void load_rec_in_disabled_fields(TMask& m);
void copy_rec_in_insert_fields(TMask& m);
// ------------------------------------------------------------
protected: // TRelation_application
virtual bool user_destroy() ;
virtual bool user_create() ;
virtual bool protected_record(TRectype& rec) ;
virtual void init_insert_mode(TMask& m) ;
virtual void init_modify_mode(TMask& m);
virtual void init_query_mode (TMask&);
virtual int rewrite(const TMask& m);
public:
bool exist_journal() { return _exist_journal; }
char frequenza_versamenti(long firm, int year) const;
TGeneric_table_app();
virtual ~TGeneric_table_app() {}
};
HIDDEN inline TGeneric_table_app& app() { return (TGeneric_table_app&)main_app(); }
TGeneric_table_app::TGeneric_table_app()
: _exist_journal(FALSE), _stampa_intest(FALSE), _ver(NULL)
{
}
// - tabella versamenti-specific -------------------------------
void TGeneric_table_app::load_rec_in_disabled_fields(TMask& m)
// carica il record del periodo precedente a quello immesso
// nei campi disabilitati relativi.
{
CHECK(_ver, "Null table");
TString key(m.get(F_ANNOES));
key << m.get(F_MESEES);
_ver->put("CODTAB",key);
if (_ver->read(_isgteq) == _iseof) // Se non lo trova si posiziona sull'ultimo
_ver->last();
else
_ver->prev(); // altrimenti legge il periodo precedente.
if (_ver->good()) // se si e' immesso un periodo precedente al primo , non copiera' nulla
{
m.set(F_1_TRIMESTRE_P,_ver->get("R0"));
m.set(F_2_TRIMESTRE_P,_ver->get("R1"));
m.set(F_3_TRIMESTRE_P,_ver->get("R2"));
m.set(F_4_TRIMESTRE_P,_ver->get("R3"));
m.set(F_ANNUALE_P,_ver->get("R4"));
m.set(F_I_PERIODO_P,_ver->get("R5"));
m.set(F_I_ANNUALE_P,_ver->get("R6"));
m.set(F_I_ACCONTO_P,_ver->get("R7"));
m.set(F_I_INTEGRATIVO_P,_ver->get("R8"));
m.set(F_I_CESSAZIONE_P,_ver->get("R9"));
m.set(F_I_ART74_P,_ver->get("R10"));
m.set(F_P_LIQ_NORMALE_P,_ver->get("R11"));
m.set(F_P_LIQ_DIFFERI_P,_ver->get("R12"));
}
}
void TGeneric_table_app::copy_rec_in_insert_fields(TMask& m)
{
TString tmp;
tmp = m.get(F_1_TRIMESTRE_P); m.set(F_1_TRIMESTRE, tmp);
tmp = m.get(F_2_TRIMESTRE_P); m.set(F_2_TRIMESTRE, tmp);
tmp = m.get(F_3_TRIMESTRE_P); m.set(F_3_TRIMESTRE, tmp);
tmp = m.get(F_4_TRIMESTRE_P); m.set(F_4_TRIMESTRE, tmp);
tmp = m.get(F_ANNUALE_P); m.set(F_ANNUALE, tmp);
tmp = m.get(F_I_PERIODO_P); m.set(F_I_PERIODO,tmp);
tmp = m.get(F_I_ANNUALE_P); m.set(F_I_ANNUALE,tmp);
tmp = m.get(F_I_ACCONTO_P); m.set(F_I_ACCONTO,tmp);
tmp = m.get(F_I_INTEGRATIVO_P); m.set(F_I_INTEGRATIVO,tmp);
tmp = m.get(F_I_CESSAZIONE_P); m.set(F_I_CESSAZIONE,tmp);
tmp = m.get(F_I_ART74_P); m.set(F_I_ART74,tmp);
tmp = m.get(F_P_LIQ_NORMALE_P); m.set(F_P_LIQ_NORMALE,tmp);
tmp = m.get(F_P_LIQ_DIFFERI_P); m.set(F_P_LIQ_DIFFERI,tmp);
}
// -------------------------------------------------------------
void TGeneric_table_app::init_insert_mode(TMask& m)
{
const TString& n = get_tabname();
if (n == "REG")
{
const long ditta = get_firm();
const int anno = atoi(m.get(F_ANNO));
m.set(F_STAMPA_INTESTAZIONE, _stampa_intest ? "X" : "");
if (ditta != _oldditta || anno != _oldanno)
{
_oldditta = ditta;
_oldanno = anno;
TTable reg("REG");
reg.put("CODTAB", m.get(F_ANNO));
TRectype to(reg.curr());
_exist_journal = FALSE;
for (reg.read(_isgteq); !_exist_journal && reg.good() && reg.curr() <= to; reg.next())
_exist_journal = (reg.get_long("I0") == REG_JOURNAL);
}
}
else
if (n == TAB_VERSAMENTI)
{
// Se il record e' nuovo prima carica il record precedente
load_rec_in_disabled_fields(m);
// poi copia il contenuto nei campi di input, come valori predefiniti
copy_rec_in_insert_fields(m);
}
}
void TGeneric_table_app::init_modify_mode(TMask& m)
{
Tab_application::init_modify_mode(m);
const TString& n = get_tabname();
if (n == "REG")
{
TString16 config;
config.format("REG%05ld", m.get_long(F_CODDITTA));
config << m.get(F_CODICE);
TConfig ini(CONFIG_STAMPE, config);
const int what = ini.get_int("Type", NULL, -1, -1);
m.set(F_CONFIG, what >= 0 ? "X" : "");
m.enable(F_CONFIG, what >= 0);
}
else
if (n == TAB_VERSAMENTI)
load_rec_in_disabled_fields(m);
}
void TGeneric_table_app::init_query_mode(TMask& m)
{
Tab_application::init_query_mode(m);
if (get_tabname() == "%DEL")
{
m.show(F_BANCA1);
m.show(F_BANCA2);
m.show(F_CONCESSIONE);
}
}
bool TGeneric_table_app::protected_record(TRectype& rec)
{
bool prot = rec.get_bool(FPC);
if (!prot)
{
if (get_tabname() == "%IVD") // Impedisce la cancellazione di una classe se ha sottoclassi
{
TLocalisamfile& f = get_relation()->lfile();
const TRecnotype pos = f.recno();
const TString16 cod(rec.get("CODTAB"));
const int err = f.next();
if (err == NOERR)
{
TString16 next(f.get("CODTAB")); next.cut(cod.len());
prot = cod == next;
}
f.readat(pos);
}
}
return prot;
}
HIDDEN bool tiporeg_handler(TMask_field& f, KEY k)
{
if ((k == K_TAB || k == K_ENTER) && app().exist_journal() &&
(atoi(f.get()) == REG_JOURNAL)
)
return f.error_box("Non e' possibile avere due registri giornale nello stesso anno");
return TRUE;
}
HIDDEN bool printer_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
if (!m.query_mode())
{
TString16 config;
config.format("REG%05ld", m.get_long(F_CODDITTA));
config << m.get(F_CODICE);
if (config.len() > 8) // REG+ANNO+CODICE di tre caratteri
{
TPrinter& p = printer();
p.set_printtype(normprinter); // Force configuration update
p.read_configuration(config);
if (p.set())
{
m.enable(F_CONFIG);
m.set(F_CONFIG, "X");
}
p.read_configuration();
}
else
return f.error_box("Nessun registro selezionato");
}
}
return TRUE;
}
char TGeneric_table_app::frequenza_versamenti(long firm, int year) const
{
char freq = 'M';
TString16 key; key.format("%05ld%d", firm, year);
TTable lia("%LIA");
lia.put("CODTAB", key);
if (lia.read() != NOERR)
{
TLocalisamfile nditte(LF_NDITTE);
nditte.put("CODDITTA", firm);
nditte.read();
freq = nditte.get_char("FREQVIVA");
}
else
freq = lia.get_char("S7");
CHECK(freq == 'M' || freq == 'T', "Frequenza versamenti IVA assurda");
return freq;
}
HIDDEN bool coddel_handler(TMask_field& f, KEY k)
{
const TMask& m = f.mask();
if (!m.query_mode() && k == K_TAB)
{
const short id = f.dlg();
long cod;
if (id == F_BANCA1)
cod = m.get_long(F_BANCA1);
if (id == F_CONCESSIONE)
cod = m.get_long(F_CONCESSIONE);
if (id == F_BANCA1)
if (cod != 0)
f.mask().hide(F_CONCESSIONE);
if (id == F_CONCESSIONE)
if (cod != 0)
{
const long firm = m.get_long(F_DITTA);
TLocalisamfile nditte(LF_NDITTE);
nditte.put("CODDITTA", firm);
if (nditte.read() == NOERR)
{
const char tipoa = nditte.get_char("TIPOA");
const long codan = nditte.get_long("CODANAGR");
TLocalisamfile anag(LF_ANAG);
anag.put("TIPOA", tipoa);
anag.put("CODANAGR", codan);
if (anag.read() == NOERR)
{
const bool titcf = anag.get_bool("TITCF");
if (!titcf)
{
f.mask().hide(F_CONCESSIONE);
return f.error_box("Concessione non ammessa senza conto fiscale");
}
f.mask().hide(F_BANCA1);
f.mask().hide(F_BANCA2);
}
}
}
}
return TRUE;
}
HIDDEN bool intdel_handler(TMask_field& f, KEY k)
{
const TMask& m = f.mask();
if (!m.query_mode() && k == K_ENTER)
{
const long firm = m.get_long(F_DITTA);
const int anno = m.get_int(F_ANNODEL);
const real imp(m.get(F_IMPORTO));
const real intr(f.get());
if (!intr.is_zero())
if (app().frequenza_versamenti(firm, anno) == 'T')
{
TConfig cnf(CONFIG_DITTA, "cg");
bool isintr = cnf.get_bool("InTrTr");
if (isintr)
return f.error_box("Interessi non ammessi: ditta con NO calcolo interessi");
}
else return f.error_box("Interessi non ammessi: ditta con versamenti mensili");
if (imp < intr)
return f.error_box("Incoerenza importo versato e interessi");
else if (!imp.is_zero() && imp == intr)
return f.error_box("Incoerenza importo versato e interessi");
}
return TRUE;
}
HIDDEN bool impdel_handler(TMask_field& f, KEY k)
{
const TMask& m = f.mask();
if (!m.query_mode() && k == K_ENTER)
{
const int tipo_del = m.get_int(F_TIPODEL);
if (tipo_del == 1 || tipo_del == 7)
{
TInteressi_IVA_table ver;
const int mese_del = m.get_int(F_MESEDEL);
real lim;
if (ver.read(m.get_int(F_ANNODEL), (mese_del>12) ? 12 : mese_del) != NOERR)
warning_box("Errore %d in lettura tabella versamenti ed interessi.",ver.status());
if (tipo_del == 1)
{
if (mese_del == 12) lim = ver.get(I_ANNUALE);
else lim = ver.get(I_PERIODICO);
}
else lim = ver.get(I_ACCONTOIVA);
const real imp(m.get(F_IMPORTO));
if (imp < lim)
return f.yesno_box("Importo inferiore a Lit. %s. Registrare ugualmente?", lim.string("."));
}
}
return TRUE;
}
HIDDEN bool mese_handler(TMask_field& f, KEY k)
{
// if (!f.mask().query_mode() && k == K_ENTER)
if (k == K_ENTER)
{
TMask& m = f.mask();
const int vers = m.get_int(F_TIPODEL);
if (vers == 1)
{
const int mese = m.get_int(F_MESEDEL);
const long firm = m.get_long(F_DITTA);
const int anno = m.get_int(F_ANNODEL);
if (app().frequenza_versamenti(firm, anno) == 'T')
{
TLocalisamfile nditte(LF_NDITTE);
nditte.zero();
nditte.put("CODDITTA",firm);
if (nditte.read() == NOERR)
{
TString16 attprev = nditte.get("CODATTPREV");
TLocalisamfile attiv(LF_ATTIV);
attiv.zero();
attiv.put("CODDITTA",firm);
attiv.put("CODATT",attprev);
if (attiv.read() != NOERR) attiv.zero();
bool benzinaio = attiv.get_bool("ART74_4");
bool gest4 = FALSE;
if (benzinaio)
{
TConfig cnf(CONFIG_DITTA, "cg");
gest4 = cnf.get_bool("GesT74");
}
if (benzinaio && gest4)
{
if (mese != 3 && mese != 6 && mese != 9 && mese != 12 && mese != 13)
{
TMask* mask = &m;
mask->reset();
return f.error_box("Ditta trimestrale: indicare trimestre");
}
}
else if (mese != 3 && mese != 6 && mese != 9 && mese != 13)
{
TMask* mask = &m;
mask->reset();
return f.error_box("Ditta trimestrale: indicare trimestre");
}
}
}
}
}
return TRUE;
}
bool TGeneric_table_app::user_create()
{
bool ok = Tab_application::user_create();
if (ok)
{
const TString& name = get_tabname();
TMask& mask = *get_mask();
if (name == "REG")
{
mask.set_handler(F_TIPO, tiporeg_handler);
mask.set_handler(F_PRINTER, printer_handler);
TConfig st(CONFIG_STUDIO, "cg");
_stampa_intest = st.get_bool("StiReg");
}
if (name == "%DEL")
{
mask.set_handler(F_MESEDEL, mese_handler);
mask.set_handler(F_IMPORTO, impdel_handler);
mask.set_handler(F_INTERESSI, intdel_handler);
mask.set_handler(F_BANCA1, coddel_handler);
mask.set_handler(F_CONCESSIONE, coddel_handler);
}
if (name == "CAM")
set_search_field(FLD_TABCAM_D0);
if (name == TAB_VERSAMENTI)
{
_ver = new TTable(TAB_VERSAMENTI);
_ver->put("CODTAB","199301");
if (_ver->read() != NOERR) // Se %VER non esiste la crea
{
_ver->put("CODTAB","199301");
_ver->put("R0","1.5"); _ver->put("R1","1.5");
_ver->put("R2","1.5"); _ver->put("R3","1.5"); _ver->put("R4","1.5");
_ver->put("R5","50500"); _ver->put("R7","200000");
_ver->put("R11","88"); _ver->put("R12","88");
if (_ver->write() != NOERR)
error_box("Errore %d in scrittura sulla tabella versamenti",_ver->status());
}
}
}
return ok;
}
bool TGeneric_table_app::user_destroy()
{
const TString& n = get_tabname();
if (n == TAB_VERSAMENTI)
delete _ver;
return Tab_application::user_destroy();
}
int TGeneric_table_app::rewrite(const TMask& m)
{
if (get_tabname() == "REG" && !m.get_bool(F_CONFIG))
{
TString16 config;
config.format("REG%05ld", m.get_long(F_CODDITTA));
config << m.get(F_CODICE);
TConfig ini(CONFIG_STAMPE, config);
const int what = ini.get_int("Type", NULL, -1, -1);
if (what >= 0)
ini.set("Type", -1);
}
return Tab_application::rewrite(m);
}
int ba3100(int argc, char* argv[])
{
TGeneric_table_app a;
a.run(argc, argv, "Tabella");
return 0;
}