8d5d6540be
cg2.url Aggiunto menu colori cg2100.cpp Aggiunta gestione menu colori cg2100b.uml Accorciata colonna tipo cg2100c.uml Accorciata colonna tipo cg2102.cpp Gestione righe colorate cg2102.h Aggiunte funzioni gestione righe colorate cg3.cpp Aggiunti mastrini a video cg3.url Aggiunto menu dei mastrini a video conto.cpp MEGAFIGATA, velocizzato TBill conto.h Sembra che funzioni bene! git-svn-id: svn://10.65.10.50/trunk@3892 c028cbd2-c16b-5b4b-a496-9718f37d4682
219 lines
6.0 KiB
C++
Executable File
219 lines
6.0 KiB
C++
Executable File
// --------------------------------------------------------------
|
|
// fv: cg0 -5 <tab>: gestione maschere contabilita'
|
|
// --------------------------------------------------------------
|
|
|
|
#include <tabapp.h>
|
|
#include <saldi.h>
|
|
#include <defmask.h>
|
|
#include <sheet.h>
|
|
#include "../ba/batbesc.h"
|
|
#include "cglib.h"
|
|
|
|
class CGTab_application : public Tab_application
|
|
{
|
|
// ------------- specifiche tabella esercizi ----
|
|
static bool dataini_handler(TMask_field& f, KEY k);
|
|
static bool checkbut_handler(TMask_field& f, KEY k);
|
|
void check_sheet();
|
|
bool check_esercizio(TString& cod, TDate s1, TDate f1);
|
|
// --------------------------------------------
|
|
|
|
protected:
|
|
|
|
virtual bool protected_record(TRectype & rec);
|
|
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
|
|
public:
|
|
|
|
static CGTab_application& app() { return (CGTab_application&)main_app(); }
|
|
|
|
CGTab_application() : Tab_application() {}
|
|
virtual ~CGTab_application() {}
|
|
};
|
|
|
|
bool CGTab_application::protected_record(TRectype &rec)
|
|
{
|
|
if (get_tabname() == "ESC")
|
|
{
|
|
// cerca saldo con questo esercizio
|
|
const TString16 cod(rec.get("CODTAB"));
|
|
TLocalisamfile saldi(LF_SALDI);
|
|
saldi.put(SLD_ANNOES, cod);
|
|
// se ce n'e' uno non si puo' cancellare
|
|
if (saldi.read(_isgteq) == NOERR && cod == rec.get("CODTAB"))
|
|
return TRUE;
|
|
}
|
|
return Tab_application::protected_record(rec);
|
|
}
|
|
|
|
bool CGTab_application::user_create()
|
|
{
|
|
bool ok = Tab_application::user_create();
|
|
if (ok)
|
|
{
|
|
if (get_tabname() == "ESC")
|
|
{
|
|
get_mask()->set_handler(F_DATAINI, dataini_handler);
|
|
get_mask()->set_handler(BUT_CHECK, checkbut_handler);
|
|
}
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
bool CGTab_application::user_destroy()
|
|
{
|
|
return Tab_application::user_destroy();
|
|
}
|
|
|
|
|
|
// - esercizi-specific --------------------------------------------------------
|
|
|
|
bool CGTab_application::dataini_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_ENTER && f.mask().is_running() && !f.mask().query_mode())
|
|
{
|
|
TString16 cod = f.mask().get(F_ANNO);
|
|
TDate s1 = f.mask().get_date(F_DATAINI);
|
|
TDate f1 = f.mask().get_date(F_DATAFIN);
|
|
|
|
return app().check_esercizio(cod, s1, f1);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool CGTab_application::check_esercizio(TString& cod, TDate s1, TDate f1)
|
|
{
|
|
// -----------------------------------------------------------------------------------------
|
|
// chiamata prima di registrare. Controlla:
|
|
// - se non ci sono altri esercizi, ok;
|
|
// - se ce ne sono altri:
|
|
// 1) controllo non sovrapposizione date
|
|
// 2) se ci sono es. con date inferiori, datainizio -1 deve essere = data fine altro es;
|
|
// 3) se ci sono es. con date superiori, datafine +1 deve essere = data inizio altro
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
byte err = 0x00; bool ret = TRUE;
|
|
TLocalisamfile& esc = get_relation()->lfile();
|
|
|
|
bool basta1 = FALSE, basta2 = FALSE;
|
|
|
|
for (esc.first(); !esc.eof(); esc.next())
|
|
{
|
|
if (esc.get("CODTAB") == cod)
|
|
continue;
|
|
|
|
TDate s2 = esc.get_date("D0");
|
|
TDate f2 = esc.get_date("D1");
|
|
TDate s1d = s1; --s1d;
|
|
TDate s2d = s2; --s2d;
|
|
|
|
// check sovrapposizione
|
|
if (s1 <= f2 && s2 <= f1)
|
|
err |= 0x01;
|
|
else
|
|
{
|
|
if (!basta1 && f1 < s2 && f1 != s2d)
|
|
err |= 0x02;
|
|
if (f1 < s2 && f1 == s2d)
|
|
{
|
|
err &= ~0x02;
|
|
basta1 = TRUE;
|
|
}
|
|
if (!basta2 && s1 > f2 && f2 != s1d)
|
|
err |= 0x04;
|
|
if (s1 > f2 && f2 == s1d)
|
|
{
|
|
err &= ~0x04;
|
|
basta2 = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (err)
|
|
{
|
|
ret = FALSE;
|
|
TString errstr(120);
|
|
errstr << "Date esercizio errate: \n";
|
|
// build error string
|
|
if (err & 0x01)
|
|
errstr << "\n - l'esercizio si sovrappone ad altro gia' esistente";
|
|
if (err & 0x02)
|
|
errstr << "\n - l'esercizio non e' contiguo ad esercizi successivi";
|
|
if (err & 0x04)
|
|
errstr << "\n - l'esercizio non e' contiguo ad esercizi precedenti";
|
|
|
|
if (!(err & 0x01))
|
|
{
|
|
errstr << "\nSi desidera registrare ugualmente?";
|
|
ret = yesno_box(errstr);
|
|
}
|
|
else error_box(errstr);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
void CGTab_application::check_sheet()
|
|
{
|
|
// crea 'nu bellu shit co'tutte le informazion e un messaggino
|
|
// di error se ce n'e' bisogn
|
|
TLocalisamfile& esc = get_relation()->lfile();
|
|
TArray escarr(10);
|
|
for (esc.first(); !esc.eof(); esc.next())
|
|
escarr.add(new TEsercizio(esc.curr()));
|
|
|
|
escarr.sort();
|
|
|
|
TArray_sheet as(-1,-1,70,20,"Esercizi contabili",
|
|
"Codice|Inizio@10|Fine@10|Scarico@10|Chiusura@10|Note@20",
|
|
|
|
0x10);
|
|
|
|
TDate s1;
|
|
|
|
for (int i = 0; i < escarr.items(); i++)
|
|
{
|
|
// sovrapposti non possono essere, perche' non si possono
|
|
// registrare; possono solo esserci discontinuita'
|
|
TEsercizio& e = (TEsercizio&)escarr[i];
|
|
TToken_string* tt = new TToken_string(80);
|
|
tt->add(e.codice());
|
|
tt->add(e.inizio().string());
|
|
tt->add(e.fine().string());
|
|
tt->add(e.scarico().string());
|
|
tt->add(e.chiusura().string());
|
|
|
|
if (i > 0 && e.inizio() != ++s1)
|
|
tt->add("*** non contiguo ***");
|
|
else tt->add("");
|
|
|
|
s1 = e.fine();
|
|
|
|
as.add(tt);
|
|
}
|
|
|
|
as.run();
|
|
}
|
|
|
|
bool CGTab_application::checkbut_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE && f.mask().is_running())
|
|
app().check_sheet();
|
|
return TRUE;
|
|
}
|
|
|
|
// -------------------------------------------------------------
|
|
|
|
int cg0600(int argc, char* argv[])
|
|
{
|
|
CGTab_application a;
|
|
|
|
a.run(argc, argv, "Gestione tabelle contabili");
|
|
return 0;
|
|
}
|
|
|
|
|
|
|