Corretta invalidazione liquidazione trimestrale

git-svn-id: svn://10.65.10.50/trunk@465 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-10-26 12:22:30 +00:00
parent 87766987bc
commit 06df35bdc0
8 changed files with 125 additions and 40 deletions

View File

@ -47,6 +47,7 @@ BEGIN
DISPLAY "Movimento" TIPOMOV
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
KEY 2
HELP "Descrizione della causale"
MESSAGE COPY, F_DESCR2
END
@ -176,7 +177,7 @@ PAGE "" -1 -1 77 20
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 0 "@BCampi obbligatori in immissione documenti"
PROMPT 1 0 ""
END
STRING F_COD_CAUS2 3
@ -193,7 +194,7 @@ END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 3 "@BCampi obbligatori in caricamento documenti"
PROMPT 1 3 "@BCampi obbligatori in immissione documenti"
END
BOOLEAN F_DATA_DOC

View File

@ -45,9 +45,14 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(F_CODCAUS, caus_query_handler);
m->set_handler(F_DATAREG, datareg_handler);
m->set_handler(F_DATACOMP, datacomp_handler);
TConfig c(CONFIG_STUDIO, "cg");
const bool dr = c.get_bool("PoCuDr"); // Scelta primo campo col focus
m->first_focus(dr ? F_DATAREG : F_CODCAUS);
_savenew = TRUE;
if (c.exist("Cg21SN"))
_savenew = c.get_bool("Cg21SN"); // Salva e registra
}
break;
case 1:
@ -139,8 +144,9 @@ bool TPrimanota_application::user_create()
return TRUE;
}
bool TPrimanota_application::save_and_new() const
{ return TRUE; }
{ return _savenew; }
bool TPrimanota_application::user_destroy()
@ -279,6 +285,7 @@ void TPrimanota_application::read_firm_params()
_rif_par = c.get_bool("RifPar");
}
void TPrimanota_application::init_mask(TMask& m)
{
disable_menu_item(M_FILE_PRINT);

View File

@ -1,6 +1,7 @@
#include <stdlib.h>
#include <xvtmacro.h>
#include <applicat.h>
#include <tabutil.h>
#include "cg2101.h"
@ -134,6 +135,60 @@ int TMovimentoPN::cancella(TLocalisamfile& f, int da, int a)
return f.status();
}
char TMovimentoPN::frequenza_versamenti(int year) const
{
static int last_year = 0;
static char last_freq = ' ';
if (year != last_year)
{
TString16 key;
key << year;
TTable lia("LIA");
lia.put("CODTAB", key);
if (lia.read() != NOERR)
{
TLocalisamfile nditte(LF_NDITTE);
nditte.put("CODDITTA", main_app().get_firm());
nditte.read();
last_freq = nditte.get_char("FREQVIVA");
}
else
last_freq = lia.get_char("S7");
CHECK(last_freq == 'M' || last_freq == 'T', "Frequenza versamento IVA assurda");
}
return last_freq;
}
bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
{
bool calcolata = FALSE;
const int anno = data.year();
int mese = data.month();
if (frequenza_versamenti(anno) == 'T')
mese += 2 - ((mese-1) % 3);
// Chiave di LIM: Anno (1-4), Mese (5-6)
TTable lim("LIM");
TString16 key;
key << anno << mese;
lim.put("CODTAB", key);
if (lim.read() == NOERR)
calcolata = lim.get_bool("B0");
if (calcolata && reset)
{
// Resetta il flag di calcolato sulla liquidazione IVA del mese di registrazione
lim.put("B0", FALSE);
lim.write();
}
return calcolata;
}
int TMovimentoPN::registra(bool re, bool force)
{
@ -202,31 +257,16 @@ int TMovimentoPN::registra(bool re, bool force)
const TDate datareg = m.get_date("DATAREG");
registro.update(max(protiva, uprotiva), datareg);
}
// 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();
}
}
controlla_liquidazione(d, TRUE);
const int att = att_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);
TString16 chiave;
chiave << d.year() << registro.attivita() << a << d.month();
plm.put("CODTAB", chiave);
if (plm.read() == NOERR)

View File

@ -43,6 +43,9 @@ public:
int cg_items() const { return _cg.items(); }
int iva_items() const { return _iva.items(); }
void destroy_rows();
char frequenza_versamenti(int year) const; // Ritorna 'M'ensile o 'T'rimestrale
bool controlla_liquidazione(const TDate& data, bool reset = FALSE) const;
TMovimentoPN();
virtual ~TMovimentoPN() {}

View File

@ -59,6 +59,7 @@ const real& TPrimanota_application::cod2IVA(const TMask& m)
return _percent;
}
real TPrimanota_application::scorpora(real& imponibile, const real& percent)
{
real imposta = abs(imponibile) * percent / (percent + 100.0); imposta.ceil();
@ -1082,7 +1083,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
f.warning_box("La data dell'operazione e' antecedente al %s,\n"
"ultima registrazione sul libro giornale dell'esercizio %d",
gio.last_reg().string(), ae);
if (m.query_mode())
{
const long numreg = m.get_long(F_NUMREG);
@ -1092,7 +1093,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
mov.put(MOV_NUMREG, numreg);
if (mov.read() == NOERR)
m.set(F_CODCAUS, mov.get(MOV_CODCAUS));
}
}
}
TRegistro& reg = app().causale().reg();
@ -1101,7 +1102,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
{
if (reg.year() != dr.year())
{
const bool ok = reg.reread();
const bool ok = reg.read(codreg, dr.year());
if (!ok) return FALSE;
if (app().iva() != nessuna_iva)
m.field(F_CODREG).on_hit();
@ -1118,6 +1119,12 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
f.warning_box("La data dell'operazione e' antecedente al %s,\n"
"ultima registrazione sul registro '%s' dell'anno %d",
reg.last_reg().string(), (const char*)codreg, dr.year());
if (reg.iva() != nessuna_iva && app()._rel->controlla_liquidazione(dr) == TRUE)
{
const char* m = itom(dr.month());
f.warning_box("La liquidazione IVA relativa al mese di %s e' gia' stata calcolata", m);
}
}
}
}

View File

@ -41,6 +41,7 @@ class TPrimanota_application : public TRelation_application
TipoIVA _iva; // Tipo di IVA corrente
bool _ges_val, _ges_sal; // Gestione valuta e saldaconto
bool _rif_par; // Riferimento parita (NUM_DOC | PROTIVA)
bool _savenew; // Registra e nuovo
TSaldo_agg _saldi; // Saldi da aggiornare
@ -48,7 +49,7 @@ class TPrimanota_application : public TRelation_application
long _lastreg; // Numero ultima registrazione
int _mode; // Modo maschera corrente
void* _app_data;
void* _app_data;
static bool suspended_handler(TMask_field& f, KEY k);
static bool num_handler(TMask_field& f, KEY key);

View File

@ -14,3 +14,4 @@
#define CHK_NOVIIP 114
#define CHK_NOVIPC 115
#define CHK_GSACMI 116
#define CHK_SAVENEW 117

View File

@ -4,7 +4,7 @@ PAGE "Parametri contabilita' studio" -1 -1 76 16
GROUPBOX DLG_NULL 74 4
BEGIN
PROMPT 1 1 "Dati Banca di appoggio"
PROMPT 1 1 "Dati Banca di appoggio per deleghe IVA"
END
NUMBER FLD_CODABI 5
@ -20,7 +20,7 @@ BEGIN
OUTPUT FLD_RAGSOCB S0
FIELD CodABI
CHECKTYPE NORMAL
FLAGS "RZ"
FLAGS "Z"
END
NUMBER FLD_CODCAB 5
@ -30,7 +30,7 @@ BEGIN
INPUT CODTAB[6,10] FLD_CODCAB
CHECKTYPE NORMAL
FIELD CodCAB
FLAGS "RZ"
FLAGS "Z"
END
STRING FLD_RAGSOCB 50
@ -41,32 +41,30 @@ END
BOOLEAN CHK_SIND11
BEGIN
PROMPT 2 5 "Somma imposte non detr. ad acq/import. in modello IVA 11"
PROMPT 2 5 "Somma imposte non detraibili ad acq/import. in modello IVA 11"
FIELD Sind11
END
GROUPBOX DLG_NULL 74 4
BEGIN
PROMPT 1 6 "Stampa registri"
END
BOOLEAN CHK_STIREG
BEGIN
PROMPT 2 6 "Stampa intestazione registri bollati"
PROMPT 2 7 "Stampa intestazione registri bollati"
FIELD StiReg
END
BOOLEAN CHK_NODTRG
BEGIN
PROMPT 2 7 "Non stampa data di registrazione sui registri IVA"
PROMPT 2 8 "Non stampa data di registrazione sui registri IVA"
FIELD NoDtRg
END
BOOLEAN CHK_POCUDR
BEGIN
PROMPT 2 8 "Posiz. cursore su data registr. in immissione documenti"
HELP "Determina il posizionamento automatico del cursore sulla data di registrazione o sulla causale in prima nota"
FIELD PoCuDr
END
NUMBER FLD_CODAGV 5
BEGIN
PROMPT 2 9 "Codice IVA per ricavi misti agenzie di viaggio "
PROMPT 2 10 "Codice IVA per ricavi misti agenzie di viaggio "
USE %IVA
INPUT CODTAB FLD_CODAGV
DISPLAY "Codice" CODTAB
@ -121,6 +119,33 @@ END
ENDPAGE
PAGE "Parametri contabilita' studio"
BOOLEAN CHK_POCUDR
BEGIN
PROMPT 2 2 "Posiziona cursore sulla data di registrazione in immissione documenti"
HELP "Determina il posizionamento automatico del cursore sulla data di registrazione in fase di immisione documenti"
FIELD PoCuDr
END
BOOLEAN CHK_SAVENEW
BEGIN
PROMPT 3 3 "Prima Nota"
FIELD Cg21SN
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK