Aggiunta la gestione del saldo DARE e AVERE e dei totali IMPONIBILI.

Aggiuta la ricerca per descrizione dei conti e dei clienti nelle maschere.


git-svn-id: svn://10.65.10.50/trunk@129 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-09-01 16:26:29 +00:00
parent c9d6658992
commit 03532d4a93
10 changed files with 1553 additions and 1324 deletions

View File

@ -49,6 +49,10 @@
#define F_CORRVALUTA 134 #define F_CORRVALUTA 134
#define F_DATA74TER 135 #define F_DATA74TER 135
#define F_DESCAGG 136 #define F_DESCAGG 136
#define F_DARE 137
#define F_AVERE 138
#define F_IMPONIBILI 139
#define F_IMPOSTE 140
#define F_SHEETCG 300 #define F_SHEETCG 300
#define F_SHEETIVA 301 #define F_SHEETIVA 301

View File

@ -168,7 +168,7 @@ END
SPREADSHEET F_SHEETCG SPREADSHEET F_SHEETCG
BEGIN BEGIN
PROMPT 1 10 "" PROMPT 0 9 ""
ITEM "Dare@17" ITEM "Dare@17"
ITEM "Avere@17" ITEM "Avere@17"
ITEM " @1" ITEM " @1"
@ -186,6 +186,20 @@ BEGIN
ITEM " @1" ITEM " @1"
END END
NUMBER F_DARE 17
BEGIN
PROMPT 1 -1 "Saldo Dare "
FLAGS "DRV"
PICTURE "."
END
NUMBER F_AVERE 17
BEGIN
PROMPT 40 -1 "Saldo Avere "
FLAGS "DRV"
PICTURE "."
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -315,7 +315,7 @@ STRING F_PIVACLIENTE 14
BEGIN BEGIN
PROMPT 1 11 "Partita IVA " PROMPT 1 11 "Partita IVA "
GROUP 1 GROUP 1
USE LF_CLIFO KEY 3 USE LF_CLIFO KEY 5
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT STATOPAIV F_STATOPAIV INPUT STATOPAIV F_STATOPAIV
INPUT PAIV F_PIVACLIENTE INPUT PAIV F_PIVACLIENTE
@ -331,7 +331,7 @@ STRING F_PIVAFORNITORE 14
BEGIN BEGIN
PROMPT 1 11 "Partita IVA " PROMPT 1 11 "Partita IVA "
GROUP 2 GROUP 2
USE LF_CLIFO KEY 3 USE LF_CLIFO KEY 5
INPUT TIPOCF "F" INPUT TIPOCF "F"
INPUT STATOPAIV F_STATOPAIV INPUT STATOPAIV F_STATOPAIV
INPUT PAIV F_PIVAFORNITORE INPUT PAIV F_PIVAFORNITORE
@ -534,7 +534,7 @@ END
SPREADSHEET F_SHEETIVA 0 7 SPREADSHEET F_SHEETIVA 0 7
BEGIN BEGIN
PROMPT 3 4 "" PROMPT 0 4 ""
ITEM "Imponibile@14" ITEM "Imponibile@14"
ITEM "Iva@4" ITEM "Iva@4"
ITEM "Det@1" ITEM "Det@1"
@ -547,10 +547,23 @@ BEGIN
ITEM "Descrizione Conto@50" ITEM "Descrizione Conto@50"
END END
NUMBER F_IMPONIBILI 17
BEGIN
PROMPT 1 11 "Totale imponibili "
FLAGS "DRV"
PICTURE "."
END
NUMBER F_IMPOSTE 17
BEGIN
PROMPT 40 11 "Totale imposte "
FLAGS "DRV"
PICTURE "."
END
SPREADSHEET F_SHEETCG SPREADSHEET F_SHEETCG
BEGIN BEGIN
PROMPT 3 11 "" PROMPT 0 12 ""
ITEM "Dare@17" ITEM "Dare@17"
ITEM "Avere@17" ITEM "Avere@17"
ITEM " @1" ITEM " @1"
@ -568,6 +581,20 @@ BEGIN
ITEM " @1" ITEM " @1"
END END
NUMBER F_DARE 17
BEGIN
PROMPT 1 -1 "Saldo Dare "
FLAGS "DRV"
PICTURE "."
END
NUMBER F_AVERE 17
BEGIN
PROMPT 40 -1 "Saldo Avere "
FLAGS "DRV"
PICTURE "."
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -13,209 +13,213 @@
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
TMovimentoPN::TMovimentoPN() TMovimentoPN::TMovimentoPN()
: TRelation(LF_MOV), _oldcg(0), _oldiva(0) : TRelation(LF_MOV), _oldcg(0), _oldiva(0)
{ {
add(LF_RMOV, "NUMREG=NUMREG"); add(LF_RMOV, "NUMREG=NUMREG");
add(LF_RMOVIVA, "NUMREG=NUMREG"); add(LF_RMOVIVA, "NUMREG=NUMREG");
} }
void TMovimentoPN::destroy_rows() void TMovimentoPN::destroy_rows()
{ {
_cg.destroy(); _cg.destroy();
_iva.destroy(); _iva.destroy();
} }
TRectype& TMovimentoPN::cg(int i) TRectype& TMovimentoPN::cg(int i)
{ {
TRectype* r = (TRectype*)_cg.objptr(i); TRectype* r = (TRectype*)_cg.objptr(i);
if (r == NULL) if (r == NULL)
{ {
r = new TRectype(LF_RMOV); r = new TRectype(LF_RMOV);
_cg.add(r, i); _cg.add(r, i);
} }
return *r; return *r;
} }
TRectype& TMovimentoPN::iva(int i) TRectype& TMovimentoPN::iva(int i)
{ {
TRectype* r = (TRectype*)_iva.objptr(i); TRectype* r = (TRectype*)_iva.objptr(i);
if (r == NULL) if (r == NULL)
{ {
r = new TRectype(LF_RMOVIVA); r = new TRectype(LF_RMOVIVA);
_iva.add(r, i); _iva.add(r, i);
} }
return *r; return *r;
} }
int TMovimentoPN::read_mov_rows() int TMovimentoPN::read_mov_rows()
{ {
const TLocalisamfile* rm = lfile(LF_RMOV); const TLocalisamfile* rm = lfile(LF_RMOV);
const TLocalisamfile* ri = lfile(LF_RMOVIVA); const TLocalisamfile* ri = lfile(LF_RMOVIVA);
position_rels(); position_rels();
destroy_rows(); destroy_rows();
for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV)) for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV))
{ {
const int row = rm->get_int(RMV_NUMRIG) - 1; const int row = rm->get_int(RMV_NUMRIG) - 1;
cg(row) = rm->curr(); cg(row) = rm->curr();
} }
_oldcg = cg_items(); _oldcg = cg_items();
for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA)) for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA))
{ {
const int row = ri->get_int(RMI_NUMRIG) - 1; const int row = ri->get_int(RMI_NUMRIG) - 1;
iva(row) = ri->curr(); iva(row) = ri->curr();
} }
_oldiva = iva_items(); _oldiva = iva_items();
return NOERR; return NOERR;
} }
int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate) int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate)
{ {
int err = file()->read(op, lockop, atdate); int err = file()->read(op, lockop, atdate);
if (err == NOERR) err = read_mov_rows(); if (err == NOERR) err = read_mov_rows();
return err; return err;
} }
int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile* f) int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile* f)
{ {
if (re) if (re)
{ {
const bool scrivi = f->rewrite(rec) != NOERR; const bool scrivi = f->rewrite(rec) != NOERR;
if (scrivi) f->write(rec); if (scrivi) f->write(rec);
} }
else else
{ {
f->write(rec); f->write(rec);
} }
return f->status(); return f->status();
} }
int TMovimentoPN::cancella(TLocalisamfile* f, int da, int a) int TMovimentoPN::cancella(TLocalisamfile* f, int da, int a)
{ {
const long numreg = lfile()->get_long("NUMREG"); const long numreg = lfile()->get_long("NUMREG");
for (int i = da; i <= a; i++) for (int i = da; i <= a; i++)
{ {
f->zero(); f->zero();
f->put("NUMREG", numreg); f->put("NUMREG", numreg);
f->put("NUMRIG", i); f->put("NUMRIG", i);
if (f->read(_isequal, _lock) == NOERR) if (f->read(_isequal, _lock) == NOERR)
f->remove(); f->remove();
} }
return f->status(); return f->status();
} }
int TMovimentoPN::registra(bool re, bool force) int TMovimentoPN::registra(bool re, bool force)
{ {
TLocalisamfile* m = lfile(); TLocalisamfile* m = lfile();
const int err = write_rec(re, m->curr(), m); const int err = write_rec(re, m->curr(), m);
if (err != NOERR) return err; if (err != NOERR) return err;
TLocalisamfile* rm = lfile(LF_RMOV); TLocalisamfile* rm = lfile(LF_RMOV);
TLocalisamfile* ri = lfile(LF_RMOVIVA); TLocalisamfile* ri = lfile(LF_RMOVIVA);
const long numreg = m->get_long("NUMREG"); const long numreg = m->get_long("NUMREG");
for (int i = 0 ; i < cg_items(); i++) for (int i = 0 ; i < cg_items(); i++)
{ {
if (!re) cg(i).put("NUMREG", numreg); if (!re) cg(i).put("NUMREG", numreg);
const int err = write_rec(re, cg(i), rm); const int err = write_rec(re, cg(i), rm);
if (!force && err != NOERR) return err; if (!force && err != NOERR) return err;
} }
if (i < _oldcg) if (i < _oldcg)
cancella(rm, i+1, _oldcg); cancella(rm, i+1, _oldcg);
_oldcg = cg_items(); _oldcg = cg_items();
for (i = 0 ; i < iva_items(); i++) for (i = 0 ; i < iva_items(); i++)
{ {
if (!re) iva(i).put("NUMREG", numreg); if (!re) iva(i).put("NUMREG", numreg);
const int err = write_rec(re, iva(i), ri); const int err = write_rec(re, iva(i), ri);
if (!force && err != NOERR) return err; if (!force && err != NOERR) return err;
} }
if (i < _oldiva) if (i < _oldiva)
cancella(ri, i+1, _oldiva); cancella(ri, i+1, _oldiva);
_oldiva = iva_items(); _oldiva = iva_items();
return err; return err;
} }
int TMovimentoPN::write(bool force, TDate&) int TMovimentoPN::write(bool force, TDate&)
{ {
const TLocalisamfile& r = *lfile(); const TLocalisamfile& r = *lfile();
const int annoiva = r.get_int("ANNOIVA"); const int annoiva = r.get_int("ANNOIVA");
const TString16 reg(r.get("REG")); const TString16 reg(r.get("REG"));
TRegistro registro(reg, annoiva); TRegistro registro(reg, annoiva);
if (reg.not_empty() && registro.tipo_attivita() == "M") if (registro.iva() != nessuna_iva)
{ {
const bool mista = registro.tipo_attivita() == "M";
for (int i = 0; i < iva_items(); i++) for (int i = 0; i < iva_items(); i++)
{ {
const int riga = iva(i).get_int("RIGAIMP"); int tipoatt = 1;
int tipoatt = 0; if (mista)
if (riga)
{ {
const TRectype& r = cg(riga-1); const int riga = iva(i).get_int("RIGAIMP");
const char tipo = r.get_char("TIPOC"); if (riga)
if (tipo == ' ') {
{ const TRectype& r = cg(riga-1);
TConto c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO")); const char tipo = r.get_char("TIPOC");
TRectype conto(LF_PCON); c.read(conto); if (tipo == ' ')
const TIndbil ib = (TIndbil)conto.get_int("INDBIL"); {
if (ib == ib_passivita || ib == ib_ricavi) TConto c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO"));
{ TRectype conto(LF_PCON); c.read(conto);
int ricser = conto.get_int("RICSER"); const TIndbil ib = (TIndbil)conto.get_int("INDBIL");
tipoatt = (ricser <= 0) ? 2 : 1; if (ib == ib_passivita || ib == ib_ricavi)
} {
} int ricser = conto.get_int("RICSER");
} tipoatt = (ricser == 0) ? 2 : 1;
iva(i).put("TIPOATT", tipoatt); }
}
}
}
iva(i).put("TIPOATT", tipoatt);
} }
} }
_oldcg = _oldiva = 0; _oldcg = _oldiva = 0;
int err = registra(FALSE, force); int err = registra(FALSE, force);
if (err == NOERR) if (err == NOERR)
{ {
if (reg.not_empty()) if (reg.not_empty())
{ {
const long protiva = r.get_long("PROTIVA"); const long protiva = r.get_long("PROTIVA");
const long uprotiva = r.get_long("UPROTIVA"); const long uprotiva = r.get_long("UPROTIVA");
const TDate datareg = r.get_date("DATAREG"); const TDate datareg = r.get_date("DATAREG");
registro.update(max(protiva, uprotiva), datareg); registro.update(max(protiva, uprotiva), datareg);
} }
} }
return err; return err;
} }
int TMovimentoPN::rewrite(bool force, TDate&) int TMovimentoPN::rewrite(bool force, TDate&)
{ {
return registra(TRUE, force); return registra(TRUE, force);
} }
int TMovimentoPN::remove(TDate&) int TMovimentoPN::remove(TDate&)
{ {
TLocalisamfile* m = lfile(); TLocalisamfile* m = lfile();
TLocalisamfile* rm = lfile(LF_RMOV); TLocalisamfile* rm = lfile(LF_RMOV);
TLocalisamfile* ri = lfile(LF_RMOVIVA); TLocalisamfile* ri = lfile(LF_RMOVIVA);
cancella(rm, 1, _oldcg); cancella(rm, 1, _oldcg);
cancella(ri, 1, _oldiva); cancella(ri, 1, _oldiva);
m->remove(); m->remove();
_oldcg = _oldiva = 0; _oldcg = _oldiva = 0;
return m->status(); return m->status();
} }

View File

@ -266,11 +266,17 @@ void TPrimanota_application::disable_cgs_cells(int n, char tipo)
case 'F': // Ritenute Fiscali case 'F': // Ritenute Fiscali
case 'S': // Ritenute Sociali case 'S': // Ritenute Sociali
case 'D': // IVA Detraibile case 'D': // IVA Detraibile
case 'N':last = 3; break; // IVA Non detraibile case 'N':
case 'T': // Totale documento last = 3; // IVA Non detraibile
case 'I':last = 6; break; // Imponibile break;
default :last = 0; break; // Solo contabile case 'T': // Totale documento
} case 'I':
last = 7; // Imponibile
break;
default :
last = 0; // Solo contabile
break;
}
TSheet_field& cg = cgs(); TSheet_field& cg = cgs();
for (int i = 0; i < last; i++) for (int i = 0; i < last; i++)
@ -343,14 +349,7 @@ void TPrimanota_application::cgs_pack()
{ {
const real imp = get_cgs_imp(i); const real imp = get_cgs_imp(i);
if (imp == 0.0) if (imp == 0.0)
{
del = TRUE; del = TRUE;
/*
const TConto c(r, 6, 0x0); // Remove if import=0 and Bill not used
del = !bill_used(c);
*/
}
} }
if (del) if (del)
rows.destroy(i, FALSE); rows.destroy(i, FALSE);
@ -360,6 +359,44 @@ void TPrimanota_application::cgs_pack()
} }
real TPrimanota_application::calcola_saldo() const
{
TArray& rows = cgs().rows_array();
const int max = rows.items();
real tdare, tavere;
for (int i = 0; i < max; i++)
{
TToken_string& r = (TToken_string&)rows[i];
const real dare(r.get(0));
const real avere(r.get());
tdare += dare;
tavere += avere;
}
real saldo = tdare-tavere;
switch (saldo.sign())
{
case 1:
mask().set(F_DARE, saldo.string());
mask().reset(F_AVERE);
break;
case -1:
mask().reset(F_DARE);
saldo = -saldo;
mask().set(F_AVERE, saldo.string());
break;
default:
mask().reset(F_DARE);
mask().reset(F_AVERE);
break;
}
return saldo;
}
// Handler dello sheet di contabilita' // Handler dello sheet di contabilita'
// Certified 90% // Certified 90%
bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
@ -367,22 +404,15 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (k == K_ENTER) if (k == K_ENTER)
{ {
TSheet_field& cg = app().cgs(); TSheet_field& cg = app().cgs();
bool empty = TRUE; real saldo = app().calcola_saldo();
real saldo; if (saldo != ZERO)
for (int i = 0; i < cg.items(); i++)
{
const real imp = app().get_cgs_imp(i);
if (empty) empty = imp == 0.0;
saldo += imp;
}
if (saldo != 0.0)
{ {
const char* ss = saldo.string("."); const char* ss = saldo.string(".");
return f.error_box("Il movimento e' sbilanciato di %s lire.", ss); return f.error_box("Il movimento e' sbilanciato di %s lire.", ss);
} }
else else
if (empty) if (app().get_cgs_imp(0) == ZERO)
return f.error_box("Il movimento non contiene nessuna riga contabile!"); return f.error_box("Il movimento non ha una prima riga contabile valida!");
} }
return TRUE; return TRUE;
} }
@ -394,16 +424,21 @@ bool TPrimanota_application::cg_notify(int r, KEY k)
TToken_string& row = cg.row(r); TToken_string& row = cg.row(r);
const char tipo = row.empty() ? ' ' : row.right(1)[0]; const char tipo = row.empty() ? ' ' : row.right(1)[0];
if (k == K_SPACE) switch(k)
{ {
TMask& m = cg.sheet_mask(); case K_SPACE:
m.enable(DLG_DELREC, tipo == ' '); cg.sheet_mask().enable(DLG_DELREC, tipo == ' ');
} else break;
if (k == K_DEL) case K_ENTER:
{ app().calcola_saldo();
if (tipo != ' ') break;
return error_box("La riga %d non puo' essere cancellata", r+1); case K_DEL:
} if (tipo != ' ')
return error_box("La riga %d non puo' essere cancellata", r+1);
break;
default:
break;
}
return TRUE; return TRUE;
} }
@ -497,7 +532,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
const real& percent = cod2IVA(f.mask().get(102)); const real& percent = cod2IVA(f.mask().get(102));
real imposta = abs(imponibile) * percent / 100.0; real imposta = abs(imponibile) * percent / 100.0;
imposta.ceil(); imposta.ceil();
if (imponibile.sign() < 0) imposta = -imposta; if (imponibile < ZERO) imposta = -imposta;
const real val(f.get()); const real val(f.get());
if (val != imposta) if (val != imposta)
@ -506,8 +541,8 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
{ {
const TString16 wrong(val.string(".")); const TString16 wrong(val.string("."));
const TString16 right(imposta.string(".")); const TString16 right(imposta.string("."));
if (f.warning_box("Imposta di '%s' errata: dovrebbe essere '%s'", f.warning_box("Imposta di '%s' errata: dovrebbe essere '%s'",
(const char*)wrong, (const char*)right)); (const char*)wrong, (const char*)right);
} }
} }
} else } else
@ -524,6 +559,26 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
} }
real TPrimanota_application::calcola_imp() const
{
TArray& rows = ivas().rows_array();
const int max = rows.items();
real imponibili, imposte;
for (int r = 0; r < max; r++)
{
TToken_string& row = (TToken_string&)rows[r];
imponibili += real(row.get(0));
imposte += real(row.get(3));
}
mask().set(F_IMPONIBILI, imponibili.string());
mask().set(F_IMPOSTE, imposte.string());
return imponibili+imposte;
}
// Certified 50% // Certified 50%
bool TPrimanota_application::iva_notify(int r, KEY k) bool TPrimanota_application::iva_notify(int r, KEY k)
{ {
@ -590,6 +645,9 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
else else
app().add_cgs_imp(oldposiva, imp-oldiva); app().add_cgs_imp(oldposiva, imp-oldiva);
oldiva = imp; oldiva = imp;
app().calcola_imp();
app().calcola_saldo();
} }
return TRUE; return TRUE;
} }
@ -601,13 +659,7 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k)
{ {
if (k != K_ENTER) return TRUE; if (k != K_ENTER) return TRUE;
real imp; const real imp = app().calcola_imp();
for (int r = 0; r < app().ivas().items(); r++)
{
TToken_string& row = app().ivas().row(r);
imp += real(row.get(0)); // imponibile
imp += real(row.get(3)); // imposta
}
const TMask& m = f.mask(); const TMask& m = f.mask();
real tot(m.get(F_TOTALE)); real tot(m.get(F_TOTALE));

View File

@ -23,119 +23,121 @@
class TPrimanota_application : public TRelation_application class TPrimanota_application : public TRelation_application
{ {
TMovimentoPN* _rel; TMovimentoPN* _rel;
TLocalisamfile* _tabcom; TLocalisamfile* _tabcom;
TLocalisamfile* _tab; TLocalisamfile* _tab;
TLocalisamfile* _caus; TLocalisamfile* _caus;
TLocalisamfile* _rcaus; TLocalisamfile* _rcaus;
TLocalisamfile* _clifo; TLocalisamfile* _clifo;
TLocalisamfile* _pcon; TLocalisamfile* _pcon;
TLocalisamfile* _attiv; TLocalisamfile* _attiv;
TLocalisamfile* _saldo; TLocalisamfile* _saldo;
TLocalisamfile* _comuni; TLocalisamfile* _comuni;
TLocalisamfile* _occas; TLocalisamfile* _occas;
TLocalisamfile* _nditte; TLocalisamfile* _nditte;
TCausale _causale; // Causale corrente TCausale _causale; // Causale corrente
TLibro_giornale _giornale; // Libro giornale corrente TLibro_giornale _giornale; // Libro giornale corrente
TipoIVA _iva; // Tipo di IVA corrente TipoIVA _iva; // Tipo di IVA corrente
TSaldo_agg _saldi; // Saldi da aggiornare TSaldo_agg _saldi; // Saldi da aggiornare
TMask* _msk[4]; // Maschere di query, cg, iva TMask* _msk[4]; // Maschere di query, cg, iva
long _lastreg; // Numero ultima registrazione long _lastreg; // Numero ultima registrazione
int _mode; // Modo maschera corrente int _mode; // Modo maschera corrente
static bool suspended_handler(TMask_field& f, KEY k); static bool suspended_handler(TMask_field& f, KEY k);
static bool num_handler(TMask_field& f, KEY key); static bool num_handler(TMask_field& f, KEY key);
static bool caus_query_handler(TMask_field& f, KEY key); static bool caus_query_handler(TMask_field& f, KEY key);
static bool caus_modify_handler(TMask_field& f, KEY key); static bool caus_modify_handler(TMask_field& f, KEY key);
static bool datareg_handler(TMask_field& f, KEY key); static bool datareg_handler(TMask_field& f, KEY key);
static bool datacomp_handler(TMask_field& f, KEY key); static bool datacomp_handler(TMask_field& f, KEY key);
static bool data74ter_handler(TMask_field& f, KEY key); static bool data74ter_handler(TMask_field& f, KEY key);
static bool reg_handler(TMask_field& f, KEY key); static bool reg_handler(TMask_field& f, KEY key);
static bool clifo_handler(TMask_field& f, KEY key); static bool clifo_handler(TMask_field& f, KEY key);
static bool totale_handler(TMask_field& f, KEY key); static bool totale_handler(TMask_field& f, KEY key);
static bool ritfis_handler(TMask_field& f, KEY key); static bool ritfis_handler(TMask_field& f, KEY key);
static bool ritsoc_handler(TMask_field& f, KEY key); static bool ritsoc_handler(TMask_field& f, KEY key);
static bool visval_handler(TMask_field& f, KEY key); static bool visval_handler(TMask_field& f, KEY key);
static bool occas_code_handler(TMask_field& f, KEY key); static bool occas_code_handler(TMask_field& f, KEY key);
static bool occas_handler(TMask_field& f, KEY key); static bool occas_handler(TMask_field& f, KEY key);
static bool solaiva_handler(TMask_field& f, KEY key); static bool solaiva_handler(TMask_field& f, KEY key);
static bool descr_handler(TMask_field& f, KEY k); static bool descr_handler(TMask_field& f, KEY k);
static bool imponibile_handler(TMask_field& f, KEY key); static bool imponibile_handler(TMask_field& f, KEY key);
static bool codiva_handler(TMask_field& f, KEY key); static bool codiva_handler(TMask_field& f, KEY key);
static bool imposta_handler(TMask_field& f, KEY key); static bool imposta_handler(TMask_field& f, KEY key);
static bool dareavere_handler(TMask_field& f, KEY k); static bool dareavere_handler(TMask_field& f, KEY k);
static bool conto_handler(TMask_field& f, KEY key); static bool conto_handler(TMask_field& f, KEY key);
static bool iva_notify(int r, KEY key); static bool iva_notify(int r, KEY key);
static bool iva_handler(TMask_field& f, KEY key); static bool iva_handler(TMask_field& f, KEY key);
static bool cg_notify(int r, KEY key); static bool cg_notify(int r, KEY key);
static bool cg_handler(TMask_field& f, KEY key); static bool cg_handler(TMask_field& f, KEY key);
protected: protected:
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
virtual bool changing_mask(int mode); virtual bool changing_mask(int mode);
virtual TMask* get_mask(int mode); virtual TMask* get_mask(int mode);
virtual TRelation* get_relation() const { return _rel; } virtual TRelation* get_relation() const { return _rel; }
virtual void init_query_mode(TMask& m); virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m); virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m); virtual void init_modify_mode(TMask& m);
virtual const char* get_next_key(); virtual const char* get_next_key();
virtual int read(TMask& m); virtual int read(TMask& m);
virtual int write(const TMask& m); virtual int write(const TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
virtual bool remove(); virtual bool remove();
void genera_incasso(const char* causimm); void genera_incasso(const char* causimm);
TMask* load_mask(int n); TMask* load_mask(int n);
TMask& occas_mask() { return *load_mask(3); } TMask& occas_mask() { return *load_mask(3); }
bool get_conto(int r, TConto& c) const; bool get_conto(int r, TConto& c) const;
void mask2rel(const TMask& m); void mask2rel(const TMask& m);
TipoIVA iva() const { return _iva; } TipoIVA iva() const { return _iva; }
TMask& TPrimanota_application::mask() const; TMask& TPrimanota_application::mask() const;
void fill_sheet(TMask& m) const; void fill_sheet(TMask& m) const;
void init_mask(TMask& m); void init_mask(TMask& m);
TSheet_field& cgs() const; TSheet_field& cgs() const;
TSheet_field& ivas() const; TSheet_field& ivas() const;
static real imp2sez(const real& importo); static real imp2sez(const real& importo);
static int bill2pos(const TConto& conto, char tipo); static int bill2pos(const TConto& conto, char tipo);
static TipoIVA reg2IVA(const char* registro, int anno); static TipoIVA reg2IVA(const char* registro, int anno);
static TipoIVA cau2IVA(const char* causale, int anno); static TipoIVA cau2IVA(const char* causale, int anno);
static int type2pos(char tipo); static int type2pos(char tipo);
static const real& cod2IVA(const char* codiva); static const real& cod2IVA(const char* codiva);
static real scorpora(real& imponibile, const real& percentuale); static real scorpora(real& imponibile, const real& percentuale);
static int date2esc(const TDate& d, int* prev = NULL); static int date2esc(const TDate& d, int* prev = NULL);
static bool detraibile(int tipodet); static bool detraibile(int tipodet);
bool bill_used(const TConto& conto) const; bool bill_used(const TConto& conto) const;
int bill2contr(const TConto& c, char sezione) const; int bill2contr(const TConto& c, char sezione) const;
bool read_caus(const char* cod, int year); bool read_caus(const char* cod, int year);
TCausale& causale() { return _causale; } TCausale& causale() { return _causale; }
TLibro_giornale& giornale() { return _giornale; } TLibro_giornale& giornale() { return _giornale; }
void set_cgs_imp(int n, const real& importo); void set_cgs_imp(int n, const real& importo);
real get_cgs_imp(int n); real get_cgs_imp(int n);
void add_cgs_imp(int n, const real& importo); void add_cgs_imp(int n, const real& importo);
void cgs_pack(); void cgs_pack();
real calcola_saldo() const;
real calcola_imp() const;
void set_ivas_row(int n, const char* codiva, TConto& tc, const char* desc); void set_ivas_row(int n, const char* codiva, TConto& tc, const char* desc);
int set_cgs_row(int n, const real& importo, TConto& conto, const char* desc, char tipo); int set_cgs_row(int n, const real& importo, TConto& conto, const char* desc, char tipo);
void disable_cgs_cells(int n, char tipo); void disable_cgs_cells(int n, char tipo);
void add_cgs_tot(TMask& m); void add_cgs_tot(TMask& m);
void add_cgs_rit(bool fisc); void add_cgs_rit(bool fisc);
public: public:
TPrimanota_application(); TPrimanota_application();
}; };
#endif #endif

View File

@ -1,4 +1,4 @@
PAGE "RIGA PRIMA NOTA" -1 -1 67 17 PAGE "RIGA PRIMA NOTA" -1 -1 67 16
GROUPBOX DLG_NULL 66 3 GROUPBOX DLG_NULL 66 3
BEGIN BEGIN
@ -46,9 +46,9 @@ LIST 103 1 12
BEGIN BEGIN
PROMPT 2 6 "Tipo " PROMPT 2 6 "Tipo "
FLAGS "U" FLAGS "U"
ITEM " |Conto" MESSAGE SHOW,106|HIDE,206|HIDE,306 ITEM " |Conto" MESSAGE SHOW,106|HIDE,206|HIDE,306|SHOW,107|HIDE,207|HIDE,307
ITEM "C|Cliente" MESSAGE SHOW,206|HIDE,106|HIDE,306 ITEM "C|Cliente" MESSAGE SHOW,206|HIDE,106|HIDE,306|SHOW,207|HIDE,107|HIDE,307
ITEM "F|Fornitore" MESSAGE SHOW,306|HIDE,106|HIDE,206 ITEM "F|Fornitore" MESSAGE SHOW,306|HIDE,106|HIDE,206|SHOW,307|HIDE,107|HIDE,207
END END
NUMBER 104 3 NUMBER 104 3
@ -87,8 +87,10 @@ BEGIN
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
COPY OUTPUT 105
OUTPUT 106 SOTTOCONTO OUTPUT 106 SOTTOCONTO
OUTPUT 104 GRUPPO
OUTPUT 105 CONTO
OUTPUT 107 DESCR
ADD RUN cg0 -0 ADD RUN cg0 -0
CHECKTYPE NORMAL CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 101 102 VALIDATE REQIF_FUNC 2 101 102
@ -107,10 +109,9 @@ BEGIN
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
OUTPUT 206 CODCF OUTPUT 206 CODCF
OUTPUT 107 RAGSOC OUTPUT 307 RAGSOC
MESSAGE COPY,106 MESSAGE COPY,106
ADD RUN cg0 -1 ADD RUN cg0 -1
FLAGS "G"
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Cliente inesistente sulla riga contabile" WARNING "Cliente inesistente sulla riga contabile"
END END
@ -127,21 +128,64 @@ BEGIN
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
OUTPUT 306 CODCF OUTPUT 306 CODCF
OUTPUT 107 RAGSOC OUTPUT 307 RAGSOC
MESSAGE COPY,106 MESSAGE COPY,106
ADD RUN cg0 -1 ADD RUN cg0 -1
MESSAGE COPY,106 MESSAGE COPY,106
FLAGS "G"
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Fornitore inesistente sulla riga contabile" WARNING "Fornitore inesistente sulla riga contabile"
END END
STRING 107 50 STRING 107 50
BEGIN BEGIN
PROMPT 2 7 "Descrizione " PROMPT 2 7 "Descriz. "
FIELD LF_PCON->DESCR
USE LF_PCON KEY 2
INPUT DESCR 107
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT 106
CHECKTYPE NORMAL
WARNING "Sottoconto inesistente o mancante sulla riga contabile"
ADD RUN cg0 -0
END
STRING 207 50
BEGIN
PROMPT 2 7 "Cliente "
FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC 207
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 206
MESSAGE COPY,107
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Cliente inesistente sulla riga contabile"
END
STRING 307 50
BEGIN
PROMPT 2 7 "Fornitore "
FIELD LF_PCON->SOTTOCONTO FIELD LF_PCON->SOTTOCONTO
FLAGS "D" USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC 307
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 306
MESSAGE COPY,107
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Fornitore inesistente sulla riga contabile"
END END
GROUPBOX DLG_NULL 66 4 GROUPBOX DLG_NULL 66 4
@ -153,9 +197,9 @@ LIST 110 1 12
BEGIN BEGIN
PROMPT 2 10 "Tipo " PROMPT 2 10 "Tipo "
FLAGS "U" FLAGS "U"
ITEM " |Conto" MESSAGE SHOW,113|HIDE,213|HIDE,313 ITEM " |Conto" MESSAGE SHOW,113|HIDE,213|HIDE,313|SHOW,114|HIDE,214|HIDE,314
ITEM "C|Cliente" MESSAGE SHOW,213|HIDE,113|HIDE,313 ITEM "C|Cliente" MESSAGE SHOW,213|HIDE,113|HIDE,313|SHOW,214|HIDE,114|HIDE,314
ITEM "F|Fornitore" MESSAGE SHOW,313|HIDE,113|HIDE,213 ITEM "F|Fornitore" MESSAGE SHOW,313|HIDE,113|HIDE,213|SHOW,314|HIDE,114|HIDE,214
END END
NUMBER 111 3 NUMBER 111 3
@ -167,12 +211,10 @@ NUMBER 112 3
BEGIN BEGIN
PROMPT 32 10 "Conto " PROMPT 32 10 "Conto "
FIELD LF_PCON->CONTO FIELD LF_PCON->CONTO
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="") COPY USE 105
INPUT GRUPPO 111 INPUT GRUPPO 111
INPUT CONTO 112 INPUT CONTO 112
DISPLAY "Gruppo" GRUPPO COPY DISPLAY 105
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT 110 TMCF OUTPUT 110 TMCF
OUTPUT 111 GRUPPO OUTPUT 111 GRUPPO
OUTPUT 112 CONTO OUTPUT 112 CONTO
@ -189,21 +231,23 @@ BEGIN
COPY INPUT 112 COPY INPUT 112
INPUT SOTTOCONTO 113 INPUT SOTTOCONTO 113
COPY DISPLAY 106 COPY DISPLAY 106
COPY OUTPUT 112
OUTPUT 113 SOTTOCONTO OUTPUT 113 SOTTOCONTO
OUTPUT 111 GRUPPO
OUTPUT 112 CONTO
OUTPUT 114 DESCR
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
NUMBER 213 6 NUMBER 213 6
BEGIN BEGIN
PROMPT 45 10 "Cliente " PROMPT 45 10 "Cliente "
FIELD LF_PCON->SOTTOCONTO FIELD LF_CLIFO->CODCF
USE LF_CLIFO COPY USE 206
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT CODCF 213 INPUT CODCF 213
COPY DISPLAY 206 COPY DISPLAY 206
OUTPUT 213 CODCF OUTPUT 213 CODCF
OUTPUT 114 RAGSOC OUTPUT 214 RAGSOC
MESSAGE COPY,113 MESSAGE COPY,113
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
@ -211,22 +255,55 @@ END
NUMBER 313 6 NUMBER 313 6
BEGIN BEGIN
PROMPT 45 10 "Fornitore " PROMPT 45 10 "Fornitore "
FIELD LF_PCON->SOTTOCONTO FIELD LF_CLIFO->CODCF
USE LF_CLIFO COPY USE 306
INPUT TIPOCF "F" INPUT TIPOCF "F"
INPUT CODCF 313 INPUT CODCF 313
COPY DISPLAY 306 COPY DISPLAY 306
COPY OUTPUT 213
OUTPUT 313 CODCF OUTPUT 313 CODCF
OUTPUT 314 RAGSOC
MESSAGE COPY,113 MESSAGE COPY,113
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING 114 50 STRING 114 50
BEGIN BEGIN
PROMPT 2 11 "Descriz. "
FIELD LF_PCON->DESCR FIELD LF_PCON->DESCR
PROMPT 2 11 "Descrizione " COPY USE 107
FLAGS "D" INPUT DESCR 114
COPY DISPLAY 107
COPY OUTPUT 113
ADD RUN cg0 -0
WARNING "Conto inesistente sulla riga contabile"
END
STRING 214 50
BEGIN
PROMPT 2 11 "Cliente "
FIELD LF_CLIFO->RAGSOC
COPY USE 207
INPUT TIPOCF "C"
INPUT RAGSOC 214
COPY DISPLAY 207
COPY OUTPUT 213
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Cliente inesistente sulla riga contabile"
END
STRING 314 50
BEGIN
PROMPT 2 11 "Fornitore "
FIELD LF_CLIFO->RAGSOC
COPY USE 307
INPUT TIPOCF "F"
INPUT RAGSOC 314
COPY DISPLAY 307
COPY OUTPUT 313
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Fornitore inesistente sulla riga contabile"
END END
LIST 115 20 LIST 115 20

View File

@ -10,11 +10,11 @@ BEGIN
PROMPT 2 2 "Tipo " PROMPT 2 2 "Tipo "
FIELD TMCF FIELD TMCF
ITEM " |Conto" ITEM " |Conto"
MESSAGE SHOW,109|HIDE,209|HIDE,309 MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
ITEM "C|Cliente" ITEM "C|Cliente"
MESSAGE SHOW,209|HIDE,109|HIDE,309 MESSAGE SHOW,209|HIDE,109|HIDE,309|SHOW,210|HIDE,110|HIDE,310
ITEM "F|Fornitore" ITEM "F|Fornitore"
MESSAGE SHOW,309|HIDE,109|HIDE,209 MESSAGE SHOW,309|HIDE,109|HIDE,209|SHOW,310|HIDE,110|HIDE,210
FLAGS "U" FLAGS "U"
END END
@ -58,10 +58,10 @@ BEGIN
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT 109 SOTTOCONTO
OUTPUT 105 TIPOSPRIC OUTPUT 105 TIPOSPRIC
OUTPUT 107 GRUPPO OUTPUT 107 GRUPPO
OUTPUT 108 CONTO OUTPUT 108 CONTO
OUTPUT 109 SOTTOCONTO
OUTPUT 110 DESCR OUTPUT 110 DESCR
ADD RUN cg0 -0 ADD RUN cg0 -0
CHECKTYPE NORMAL CHECKTYPE NORMAL
@ -80,7 +80,7 @@ BEGIN
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
OUTPUT 209 CODCF OUTPUT 209 CODCF
OUTPUT 110 RAGSOC OUTPUT 210 RAGSOC
CHECKTYPE NORMAL CHECKTYPE NORMAL
ADD RUN cg0 -1 ADD RUN cg0 -1
FLAGS "G" FLAGS "G"
@ -98,7 +98,7 @@ BEGIN
OUTPUT 107 GRUPPO OUTPUT 107 GRUPPO
OUTPUT 108 CONTO OUTPUT 108 CONTO
OUTPUT 309 CODCF OUTPUT 309 CODCF
OUTPUT 110 RAGSOC OUTPUT 310 RAGSOC
CHECKTYPE NORMAL CHECKTYPE NORMAL
ADD RUN cg0 -1 ADD RUN cg0 -1
FLAGS "G" FLAGS "G"
@ -107,10 +107,58 @@ END
STRING 110 50 STRING 110 50
BEGIN BEGIN
PROMPT 2 3 "Descrizione " PROMPT 2 3 "Descriz. "
FLAGS "D" FIELD LF_PCON->DESCR
USE LF_PCON KEY 2
INPUT DESCR 107
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT 109
CHECKTYPE NORMAL
WARNING "Sottoconto inesistente o mancante sulla riga IVA"
ADD RUN cg0 -0
END END
STRING 210 50
BEGIN
PROMPT 2 3 "Cliente "
FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC 210
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 209
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Cliente inesistente sulla riga IVA"
END
STRING 310 50
BEGIN
PROMPT 2 3 "Fornitore "
FIELD LF_PCON->SOTTOCONTO
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC 310
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 309
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
WARNING "Fornitore inesistente sulla riga IVA"
END
GROUPBOX DLG_NULL 67 5 GROUPBOX DLG_NULL 67 5
BEGIN BEGIN
PROMPT 1 5 "Imposta" PROMPT 1 5 "Imposta"

View File

@ -7,18 +7,19 @@
int main(int argc,char** argv) int main(int argc,char** argv)
{ {
int rt = 0 ; int rt = 0 ;
int s = atoi(argv[1]+1) ; int s = atoi(argv[1]+1) ;
switch (s) switch (s)
{ {
case 0: rt = cg3100(argc,argv) ; break; case 0: rt = cg3100(argc,argv) ; break;
case 1: rt = cg3200(argc,argv) ; break; case 1: rt = cg3200(argc,argv) ; break;
// case 2: rt = cg3400(argc,argv) ; break; case 2: rt = cg3300(argc,argv) ; break;
case 3: rt = cg3500(argc,argv) ; break; case 3: rt = cg3400(argc,argv) ; break;
default: error_box(usage, argv[0]) ; break; case 4: rt = cg3500(argc,argv) ; break;
} default: error_box(usage, argv[0]) ; break;
return rt; }
return rt;
} }

View File

@ -12,7 +12,7 @@
int cg3100(int argc, char* argv[]); int cg3100(int argc, char* argv[]);
int cg3200(int argc, char* argv[]); int cg3200(int argc, char* argv[]);
int cg3300(int argc, char* argv[]); int cg3300(int argc, char* argv[]);
//int cg3400(int argc, char* argv[]); int cg3400(int argc, char* argv[]);
int cg3500(int argc, char* argv[]); int cg3500(int argc, char* argv[]);
#endif // __CG3_H #endif // __CG3_H