Migliorata cancellazione automatica dei conti inutilizzati in contabilita'

git-svn-id: svn://10.65.10.50/trunk@337 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-10-10 09:49:00 +00:00
parent 027bf745b6
commit 1d0869e9a2
11 changed files with 960 additions and 943 deletions

View File

@ -564,7 +564,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
const long numreg = m.get_long(F_NUMREG); const long numreg = m.get_long(F_NUMREG);
const TDate datareg(m.get(F_DATAREG)); const TDate datareg(m.get(F_DATAREG));
const int annoes = (int) m.get_long(F_ANNOES); const int annoes = m.get_int(F_ANNOES);
_saldi.set_movprovv(m.get_bool(F_PROVVISORIO)); _saldi.set_movprovv(m.get_bool(F_PROVVISORIO));
_saldi.set_movap(_causale.apertura()); _saldi.set_movap(_causale.apertura());
@ -686,24 +686,6 @@ void TPrimanota_application::mask2rel(const TMask& m)
cur++; cur++;
} }
// Resetta il flag di calcolato sulla liquidazione IVA del mese di registrazione
// TBI: occorre resettarlo anche su PLM (B0), attivita' per attivita'
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Mese (10-11)
//
const TDate d(m.get(F_DATAREG));
TString16 chiave; chiave << d.year() << d.month();
TTable lim("LIM");
lim.put("CODTAB", chiave);
if (lim.read() == NOERR)
{
const bool calcolato = lim.get_bool("B0");
if (calcolato)
{
lim.put("B0", FALSE);
lim.rewrite();
}
}
} }

View File

@ -136,36 +136,6 @@ BEGIN
COPY OUTPUT F_CODCAUS COPY OUTPUT F_CODCAUS
END END
STRING F_VALUTA 3
BEGIN
PROMPT 1 9 "Valuta "
FIELD CODVAL
FLAGS "U"
GROUP 3
USE %VAL
INPUT CODTAB F_VALUTA
DISPLAY "Codice" CODTAB
DISPLAY "Nome@50" S0
DISPLAY "Cambio corrente" R0
OUTPUT F_VALUTA CODTAB
OUTPUT F_CAMBIO R0
END
NUMBER F_CAMBIO 10
BEGIN
PROMPT 16 9 "Cambio "
FIELD CAMBIO
FLAGS "RU"
GROUP 3
PICTURE ".3"
END
BOOLEAN F_VISVAL
BEGIN
PROMPT 42 9 "Visualizza importi in valuta"
GROUP 3
END
SPREADSHEET F_SHEETCG SPREADSHEET F_SHEETCG
BEGIN BEGIN
PROMPT 0 9 "" PROMPT 0 9 ""

View File

@ -349,6 +349,7 @@ BEGIN
ITEM "LU|Lussemburgo" ITEM "LU|Lussemburgo"
ITEM "NL|Olanda" ITEM "NL|Olanda"
ITEM "PT|Portogallo" ITEM "PT|Portogallo"
GROUP 1
END END
BUTTON F_OCCASEDIT 18 BUTTON F_OCCASEDIT 18
@ -368,12 +369,14 @@ STRING F_CODPAG 4
BEGIN BEGIN
PROMPT 60 11 "Pagamento " PROMPT 60 11 "Pagamento "
FIELD CODPAG FIELD CODPAG
FLAGS "U"
USE %CPG USE %CPG
INPUT CODTAB F_CODPAG INPUT CODTAB F_CODPAG
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODPAG CODTAB OUTPUT F_CODPAG CODTAB
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice pagamento assente"
END END
NUMBER F_TOTALE 15 NUMBER F_TOTALE 15

View File

@ -167,6 +167,45 @@ int TMovimentoPN::registra(bool re, bool force)
cancella(ri, i+1, _oldiva); cancella(ri, i+1, _oldiva);
_oldiva = iva_items(); _oldiva = iva_items();
// Resetta il flag di calcolato sulla liquidazione IVA del mese di registrazione
// Chiave di LIM: Anno (1-4), Mese (5-6)
const TDate d(m.get("DATAREG"));
TString16 chiave; chiave << d.year() << d.month();
TTable lim("LIM");
lim.put("CODTAB", chiave);
if (lim.read() == NOERR)
{
const bool calcolato = lim.get_bool("B0");
if (calcolato)
{
lim.put("B0", FALSE);
lim.rewrite();
}
}
const TString16 cod(m.get("REG"));
const int anno = m.get_int("ANNOIVA");
TRegistro reg(cod, anno);
const int att = reg.attivita_mista() ? 2 : 1;
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
TTable plm("PLM");
for (int a = 1; a <= att; a++)
{
chiave.cut(0);
chiave << d.year() << reg.attivita() << a << d.month();
plm.put("CODTAB", chiave);
if (plm.read() == NOERR)
{
const bool calcolato = plm.get_bool("B0");
if (calcolato)
{
plm.put("B0", FALSE);
plm.rewrite();
}
}
}
return err; return err;
} }

View File

@ -21,7 +21,7 @@ inline TPrimanota_application& app()
// Certified 100% // Certified 100%
TipoIVA TPrimanota_application::cau2IVA(const char* causale, int annoiva) TipoIVA TPrimanota_application::cau2IVA(const char* causale, int annoiva)
{ {
TipoIVA i = iva_errata; TipoIVA i = nessuna_iva;
if (*causale > ' ') if (*causale > ' ')
{ {
@ -29,8 +29,11 @@ TipoIVA TPrimanota_application::cau2IVA(const char* causale, int annoiva)
if (c.read(causale, annoiva)) if (c.read(causale, annoiva))
i = c.iva(); i = c.iva();
else else
{
error_box("Causale errata: '%s'", causale); error_box("Causale errata: '%s'", causale);
} else i = nessuna_iva; i = iva_errata;
}
}
return i; return i;
} }
@ -338,6 +341,15 @@ void TPrimanota_application::disable_cgs_cells(int n, char tipo)
} }
void TPrimanota_application::reset_cgs_row(int n)
{
TSheet_field& cg = cgs();
cg.row(cg.items()); // Append a new line
cg.destroy(n); // Remove line n
}
int TPrimanota_application::set_cgs_row(int n, const TImporto& imp, int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
TBill& conto, const char* desc, TBill& conto, const char* desc,
char tipo) char tipo)
@ -535,7 +547,7 @@ bool TPrimanota_application::descr_handler(TMask_field& f, KEY k)
if (k == K_ENTER && f.get().empty()) if (k == K_ENTER && f.get().empty())
{ {
if (f.mask().get(F_CODCAUS).empty()) if (f.mask().get(F_CODCAUS).empty())
return error_box("Descrizione documento necessaria in mancanza della causale"); return f.error_box("La descrizione del documento e' necessaria in mancanza della causale");
} }
return TRUE; return TRUE;
} }
@ -695,12 +707,12 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
const char tipod = detraibile(row) ? 'D' : 'N'; const char tipod = detraibile(row) ? 'D' : 'N';
oldposiva = type2pos(tipod); oldposiva = type2pos(tipod);
TString80 d;
if (oldposiva < 0 && oldiva != ZERO) if (oldposiva < 0 && oldiva != ZERO)
{ {
const int r = tipod == 'D' ? 3 : 4; const int r = tipod == 'D' ? 3 : 4;
TBill c; cau.bill(r, c); TBill c; cau.bill(r, c);
d = cau.desc_agg(r); const TString80 d(cau.desc_agg(r));
oldposiva = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), c, d, tipod); oldposiva = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), c, d, tipod);
} }
@ -708,7 +720,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
oldpos = bill2pos(oldconto, 'I'); oldpos = bill2pos(oldconto, 'I');
if (oldpos < 0 && oldconto.ok()) if (oldpos < 0 && oldconto.ok())
{ {
d = cau.desc_agg(2); const TString80 d(cau.desc_agg(2));
oldpos = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), oldconto, d, 'I'); oldpos = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), oldconto, d, 'I');
} }
} }
@ -720,13 +732,16 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
} }
if (k == K_ENTER) if (k == K_ENTER)
{ {
int delimp = -1, deliva = -1;
if (oldpos >= 0) // Il conto esisteva anche prima if (oldpos >= 0) // Il conto esisteva anche prima
{ {
const TImporto& imp = app().sub_cgs_imp(oldpos, oldimp); const TImporto& imp = app().sub_cgs_imp(oldpos, oldimp);
if (imp.valore().is_zero) delimp = oldpos;
} }
if (oldposiva >= 0) // Il conto IVA esisteva anche prima if (oldposiva >= 0) // Il conto IVA esisteva anche prima
{ {
const TImporto& imp = app().sub_cgs_imp(oldposiva, oldiva); const TImporto& imp = app().sub_cgs_imp(oldposiva, oldiva);
if (imp.valore().is_zero) deliva = oldposiva;
} }
// Aggiorna conto sulla riga contabile // Aggiorna conto sulla riga contabile
@ -745,6 +760,8 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
if (newpos < 0) if (newpos < 0)
{ {
if (delimp >= 0) app().reset_cgs_row(delimp);
const TImporto val(app().real2imp(imp, 'I')); const TImporto val(app().real2imp(imp, 'I'));
if (val.valore() != ZERO) if (val.valore() != ZERO)
{ {
@ -758,7 +775,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
val = app().add_cgs_imp(newpos, val); val = app().add_cgs_imp(newpos, val);
if (val.valore().is_zero()) if (val.valore().is_zero())
{ {
app().cgs().destroy(newpos); app().reset_cgs_row(newpos);
newpos = -1; newpos = -1;
} }
} }
@ -788,7 +805,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
val = app().add_cgs_imp(newposiva, val); val = app().add_cgs_imp(newposiva, val);
if (val.valore().is_zero()) if (val.valore().is_zero())
{ {
app().cgs().destroy(newposiva); app().reset_cgs_row(newposiva);
newposiva = -1; newposiva = -1;
} }
} }
@ -907,8 +924,8 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key)
if (!ok) return FALSE; if (!ok) return FALSE;
const int ann = f.mask().get_int(F_ANNOIVA); const int ann = f.mask().get_int(F_ANNOIVA);
const char* cau = f.get(); const TString16 cau(f.get());
TCausale c(cau, ann); const TCausale c(cau, ann);
if (!c.ok()) return FALSE; if (!c.ok()) return FALSE;
@ -959,9 +976,9 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
"ultima stampa del libro giornale dell'esercizio %d", "ultima stampa del libro giornale dell'esercizio %d",
gio.last_reg().string(), ae); gio.last_reg().string(), ae);
if (dr < gio.last_reg()) if (dr < gio.last_reg())
warning_box("La data dell'operazione e' antecedente al %s,\n" f.warning_box("La data dell'operazione e' antecedente al %s,\n"
"ultima registrazione sul libro giornale dell'esercizio %d", "ultima registrazione sul libro giornale dell'esercizio %d",
gio.last_reg().string(), ae); gio.last_reg().string(), ae);
if (m.query_mode()) if (m.query_mode())
{ {
@ -980,7 +997,6 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
const TString16 codreg(reg.name()); const TString16 codreg(reg.name());
if (codreg.not_empty()) if (codreg.not_empty())
{ {
if (reg.year() != dr.year()) if (reg.year() != dr.year())
{ {
const bool ok = reg.read(codreg, dr.year()); const bool ok = reg.read(codreg, dr.year());
@ -988,13 +1004,13 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
} }
if (dr < reg.last_print()) if (dr < reg.last_print())
return error_box("La data dell'operazione e' antecedente al %s,\n" return f.error_box("La data dell'operazione e' antecedente al %s,\n"
"ultima stampa del registro '%s' dell'anno %d", "ultima stampa del registro '%s' dell'anno %d",
reg.last_print().string(), (const char*)codreg, dr.year()); reg.last_print().string(), (const char*)codreg, dr.year());
if (dr < reg.last_reg()) if (dr < reg.last_reg())
warning_box("La data dell'operazione e' antecedente al %s,\n" f.warning_box("La data dell'operazione e' antecedente al %s,\n"
"ultima registrazione sul registro '%s' dell'anno %d", "ultima registrazione sul registro '%s' dell'anno %d",
reg.last_reg().string(), (const char*)codreg, dr.year()); reg.last_reg().string(), (const char*)codreg, dr.year());
} }
} }
} }
@ -1089,15 +1105,7 @@ bool TPrimanota_application::occas_code_handler(TMask_field& f, KEY key)
f.mask().send_key(K_TAB, O_COMUNENAS); f.mask().send_key(K_TAB, O_COMUNENAS);
} }
} }
} else }
if (key == K_ENTER)
{
const TFixed_string codice(f.get());
if (codice.not_empty())
app().mask().set(app().iva() == iva_vendite ? F_PIVACLIENTE : F_PIVAFORNITORE, codice);
else
return f.error_box("Il codice e' obbligatorio");
}
return TRUE; return TRUE;
} }
@ -1123,16 +1131,19 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
long codice = m.get_long(tipo == 'C' ? F_CLIENTE : F_FORNITORE); long codice = m.get_long(tipo == 'C' ? F_CLIENTE : F_FORNITORE);
// Se l'utente non ha ancora specificato un conto lo prendo dalla prima riga della causale // Se l'utente non ha ancora specificato un conto lo prendo dalla prima riga della causale
TBill bill; _causale.bill(1, bill);
if (conto == 0) if (conto == 0)
{ {
TBill bill; _causale.bill(1, bill);
gruppo = bill.gruppo(); m.set(F_GRUPPOCLIFO, gruppo); gruppo = bill.gruppo(); m.set(F_GRUPPOCLIFO, gruppo);
conto = bill.conto(); m.set(F_CONTOCLIFO, conto); conto = bill.conto(); m.set(F_CONTOCLIFO, conto);
codice = bill.sottoconto(); codice = bill.sottoconto();
} }
if (tipo == 'C' && causale().corrispettivi()) if (tipo == 'C' && causale().corrispettivi())
{
codice = bill.sottoconto();
tipo = ' '; tipo = ' ';
}
TBill c(gruppo, conto, codice, tipo); TBill c(gruppo, conto, codice, tipo);
real tot(m.get(F_TOTALE)); real tot(m.get(F_TOTALE));
@ -1320,6 +1331,7 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
} }
app().fill_sheet(m); app().fill_sheet(m);
app().cgs().force_update(); app().cgs().force_update();
m.set_focus();
} }
} }
return TRUE; return TRUE;

View File

@ -154,6 +154,7 @@ protected:
void set_ivas_row(int n, const char* codiva, TBill& tc, const char* desc); void set_ivas_row(int n, const char* codiva, TBill& tc, const char* desc);
int set_cgs_row(int n, const TImporto& importo, TBill& conto, const char* desc, char tipo); int set_cgs_row(int n, const TImporto& importo, TBill& conto, const char* desc, char tipo);
void reset_cgs_row(int n);
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);

View File

@ -75,6 +75,16 @@ int TRegistro::year() const
} }
static TString16 n;
const TString& TRegistro::name() const
{
if (ok()) n = _rec.get("CODTAB").mid(4);
else n = "";
return n;
}
TRegistro& TRegistro::operator =(const TRegistro& r) TRegistro& TRegistro::operator =(const TRegistro& r)
{ {

View File

@ -37,7 +37,7 @@ public:
int tipo() const; int tipo() const;
TipoIVA iva() const; TipoIVA iva() const;
bool corrispettivi() const; bool corrispettivi() const;
const TString& name() const { return _rec.get("CODTAB").mid(4); } const TString& name() const;
int year() const; int year() const;
TDate last_reg() const { return _rec.get_date("D2"); } TDate last_reg() const { return _rec.get_date("D2"); }
TDate last_print() const { return _rec.get_date("D3"); } TDate last_print() const { return _rec.get_date("D3"); }

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,20 @@
#include <xvt.h> #include <xvt.h>
#include <checks.h> #include <checks.h>
#include "cg5.h" #include "cg5.h"
#define usage "Error - usage : %s -{0,1,3}" #define usage "Error - usage : %s -{0,1,3}"
int main(int argc,char** argv) int main(int argc,char** argv)
{ {
int n = (argc > 1) ? atoi(argv[1]+1) : -1; int n = (argc > 1) ? atoi(argv[1]+1) : -1;
switch (n) switch (n)
{ {
case 0: cg5000(argc,argv) ; break; case 0: cg5000(argc,argv) ; break;
case 1: cg5100(argc,argv) ; break; case 1: cg5100(argc,argv) ; break;
case 3: cg5300(argc,argv) ; break; case 3: cg5300(argc,argv) ; break;
default: fatal_box(usage, argv[0]) ; default: fatal_box(usage, argv[0]) ;
} }
return 0; return 0;
} }

View File

@ -1,3 +1,3 @@
extern int cg5000 (int argc, char* argv[]); extern int cg5000 (int argc, char* argv[]);
extern int cg5100 (int argc, char* argv[]); extern int cg5100 (int argc, char* argv[]);
extern int cg5300 (int argc, char* argv[]); extern int cg5300 (int argc, char* argv[]);