Corretta gestione valuta in prima nota e gestione dare/avere nelle causali

git-svn-id: svn://10.65.10.50/trunk@546 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-11-07 13:50:09 +00:00
parent d87826888b
commit ab9480626f
7 changed files with 456 additions and 528 deletions

File diff suppressed because it is too large Load Diff

View File

@ -45,6 +45,7 @@ BEGIN
DISPLAY "Registro" REG
DISPLAY "Movimento" TIPOMOV
COPY OUTPUT F_COD_CAUS
CHECKTYPE REQUIRED
KEY 2
HELP "Descrizione della causale"
MESSAGE COPY, F_DESCR2
@ -127,12 +128,12 @@ BEGIN
FIELD LF_CAUSALI->M770
HELP "Inserire il tipo di collegamento Mod.770"
ITEM " |Nessuno"
ITEM "1|Ricevuta e/o pagamento fattura percipipiente"
ITEM "1|Ricevuta e/o pagamento fattura percipiente"
ITEM "2|Versamento ritenute percipiente"
ITEM "3|Versamento ritenute dipendente"
ITEM "4|Versamento contributi dipendente"
ITEM "5|Compensi non soggetti"
ITEM "6|Ritenute per operazioni occasionali"
ITEM "6|Ritenute per prestazioni occasionali"
END
NUMBER F_ANNOES 4

View File

@ -138,6 +138,7 @@ BEGIN
ITEM "A|Avere"
FIELD LF_RCAUSALI->SEZIONE
FLAGS "U"
GROUP 1
END
// Descrizione normale
@ -214,6 +215,7 @@ STRING 109 50
BEGIN
PROMPT 1 8 ""
FLAGS "D"
GROUP 1
END
BUTTON DLG_OK 9 2

View File

@ -78,6 +78,7 @@ TMask* TPrimanota_application::load_mask(int n)
ism.set_handler(209, sheet_clifo_handler);
ism.set_handler(309, sheet_clifo_handler);
}
_iva_showed = FALSE;
case 1:
{
m->set_handler(F_DATAREG, datareg_handler);
@ -85,6 +86,7 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(F_DESCR, descr_handler);
m->set_handler(F_CODCAUS, caus_modify_handler);
m->set_handler(F_SHEETCG, cg_handler);
m->set_handler(F_CAMBIO, cambio_handler);
m->set_handler(F_VISVAL, visval_handler);
TSheet_field& cg = (TSheet_field&)m->field(F_SHEETCG);
@ -225,13 +227,14 @@ bool TPrimanota_application::changing_mask(int mode)
{
const bool flag = _mode != MODE_QUERY;
if (flag && _iva != nessuna_iva)
if (flag && _iva != nessuna_iva && !_iva_showed)
{
WINDOW w = ivas().parent();
show_window(w, TRUE);
set_front_window(w);
process_events();
show_window(w, FALSE);
_iva_showed = TRUE;
}
return flag;
@ -290,6 +293,7 @@ void TPrimanota_application::init_mask(TMask& m)
const bool intra = _causale.intra();
const bool valintra = _causale.valintra();
const bool corrisp = _causale.corrispettivi();
if (_iva != nessuna_iva)
{
@ -302,24 +306,28 @@ void TPrimanota_application::init_mask(TMask& m)
else
{
forg = 'h';
clig = causale().corrispettivi() ? 'h' : 's';
clig = corrisp ? 'h' : 's';
}
m.send_key(K_SHIFT+K_CTRL+clig, -1); // group 1 (clienti)
m.send_key(K_SHIFT+K_CTRL+forg, -2); // group 2 (fornitori)
m.send_key(K_SHIFT+K_CTRL+clig, -1); // GROUP 1 (clienti)
m.send_key(K_SHIFT+K_CTRL+forg, -2); // GROUP 2 (fornitori)
if (corrisp) m.hide(F_STATOPAIV);
m.show(F_CORRLIRE, intra);
const bool corrval = intra && _causale.valintra();
const bool corrval = intra && valintra;
m.show(F_CORRVALUTA, corrval);
m.show(F_CODIVA, m.mode() == MODE_INS);
}
// Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_VISVAL (GROUP 3)
const bool valuta = _causale.valuta() || _causale.valintra();
const bool valuta = valintra || (_ges_val && _causale.valuta());
m.send_key(K_SHIFT+K_CTRL+(valuta ? 's' : 'h'), -3);
if (valuta)
m.set(F_VISVAL, "X");
if (valuta)
{
const bool ok = m.get(F_VALUTA).not_empty();
m.field(F_VISVAL).set(ok ? "X" : " ");
}
}
void TPrimanota_application::init_query_mode(TMask& m)
@ -384,14 +392,6 @@ void TPrimanota_application::init_insert_mode(TMask& m)
{
const long protiva = causale().reg().protocol();
m.set(F_PROTIVA, protiva+1);
TMask_field& vv = m.field(F_VISVAL);
if (vv.active() && m.get(F_VALUTA).empty()) // Se e' un movimento in valuta
{
const bool ok = m.field(F_VALUTA).on_key(K_F9); // Richiedi valuta
vv.set(ok ? "X" : " ");
if (ok) vv.on_hit(); // Cambia decimali
}
}
if (m.get(F_CODCAUS).empty()) return;
@ -475,20 +475,26 @@ int TPrimanota_application::read(TMask& m)
{
m.autoload(_rel);
cgs().reset();
if (_iva != nessuna_iva)
{
ivas().reset();
const TString16 occode(_rel->lfile().get("OCFPI"));
occas_mask().set(O_CODICE, occode);
const char clifo = toupper(m.get(F_CLIFO)[0]);
real cambio(_rel->lfile().get("CAMBIO"));
if (cambio < 1.0) cambio = 1.0;
m.set_exchange(FALSE, cambio);
const char clifo = toupper(m.get(F_CLIFO)[0]);
if (_iva == iva_acquisti && clifo == 'C')
error_box("Registrazione di acquisto attribuita ad un cliente"); else
if (_iva == iva_vendite && clifo == 'F')
error_box("Registrazione di vendita attribuita ad un fornitore");
}
cgs().reset();
_saldi.reset(); // Azzera saldi
_saldi.set_movprovv(_rel->lfile().get_bool("PROVVIS"));
@ -543,8 +549,6 @@ int TPrimanota_application::read(TMask& m)
m.set(F_SOLAIVA, solaiva ? "X" : " ");
m.field(F_SOLAIVA).on_hit();
ivas().reset();
const bool to_swap = test_swap(FALSE);
if (to_swap)
{
@ -583,9 +587,6 @@ int TPrimanota_application::read(TMask& m)
ivas().row(i) = riga;
}
TMask_field& vv = m.field(F_VISVAL);
if (vv.active()) vv.on_hit();
return _rel->status();
}
@ -852,11 +853,13 @@ void TPrimanota_application::genera_incasso(const char* causimm)
inc.lfile().put("REG", caus.reg().name()); // Registro
const int annoes = m.get_int(F_ANNOES);
const TString16 datareg = m.get(F_DATAREG);
TRectype& r = inc.cg(0);
r.zero();
r.put("NUMREG", _lastreg);
r.put("NUMRIG", 1);
r.put("DATAREG", datareg);
r.put("ANNOES", annoes);
r.put("SEZIONE", m.get(I_SEZIONE1));
r.put("IMPORTO", m.get(F_TOTALE));
@ -891,6 +894,7 @@ void TPrimanota_application::genera_incasso(const char* causimm)
r.put("IMPORTO", imp);
r.put("NUMREG", _lastreg);
r.put("NUMRIG", i);
r.put("DATAREG", datareg);
r.put("ANNOES", annoes);
r.put("SEZIONE", m.get(sid));
r.put("TIPOC", ' ');

View File

@ -124,6 +124,7 @@ BEGIN
OUTPUT F_DESCAGG CODTAB
OUTPUT F_DESCR S0
CHECKTYPE NORMAL
WARNING "Descrizione assente"
END
STRING F_DESCR 50
@ -234,7 +235,6 @@ BEGIN
OUTPUT F_CONTORIC CONTORIC
OUTPUT F_SOTTOCONTORIC SOTTOCRIC
OUTPUT F_CODPAG CODPAG
OUTPUT F_VALUTA CODVAL
OUTPUT F_STATOPAIV STATOPAIV
OUTPUT F_PIVACLIENTE PAIV
OUTPUT F_OCCASIONALE OCCAS
@ -265,7 +265,6 @@ BEGIN
OUTPUT F_SOTTOCONTORIC SOTTOCRIC
OUTPUT F_OCCASIONALE OCCAS
OUTPUT F_CODPAG CODPAG
OUTPUT F_VALUTA CODVAL
OUTPUT F_STATOPAIV STATOPAIV
OUTPUT F_PIVAFORNITORE PAIV
MESSAGE COPY,F_CLIENTE
@ -381,86 +380,9 @@ BEGIN
WARNING "Codice pagamento assente"
END
NUMBER F_TOTALE 15
BEGIN
PROMPT 1 12 "Totale documento "
FIELD TOTDOC
FLAGS "RV"
PICTURE "."
END
NUMBER F_RITFIS 15
BEGIN
PROMPT 1 13 "Ritenute fiscali "
FIELD RITFIS
FLAGS "RV"
PICTURE "."
END
NUMBER F_RITSOC 15
BEGIN
PROMPT 1 14 "Ritenute sociali "
FIELD LF_MOV->RITSOC
FLAGS "RV"
PICTURE "."
END
STRING F_CODIVA 4
BEGIN
PROMPT 60 12 "Codice IVA "
FLAGS "U"
USE %IVA
INPUT CODTAB F_CODIVA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "%@6" R0
DISPLAY "Tipo" S1
OUTPUT F_CODIVA CODTAB
CHECKTYPE NORMAL
END
DATE F_DATA74TER
BEGIN
PROMPT 54 13 "Data 74/ter "
CHECKTYPE REQUIRED
FIELD DATA74TER
END
NUMBER F_ANNORIF 4
BEGIN
PROMPT 45 14 "Rif.partita "
FLAGS "A"
HELP "Anno di riferimento partita"
CHECKTYPE REQUIRED
END
STRING F_NUMRIF 7
BEGIN
PROMPT 68 14 "/ "
HELP "Numero documento (o protocollo IVA) di riferimento"
CHECKTYPE REQUIRED
END
NUMBER F_CORRLIRE 15
BEGIN
PROMPT 1 15 "Corrispettivo Lire "
FIELD LF_MOV->CORRLIRE
FLAGS "R"
PICTURE "."
END
NUMBER F_CORRVALUTA 15
BEGIN
PROMPT 45 15 "Corrisp. valuta "
FIELD LF_MOV->CORRVALUTA
FLAGS "R"
PICTURE "."
END
STRING F_VALUTA 3
BEGIN
PROMPT 1 16 "Valuta "
PROMPT 1 12 "Valuta "
FIELD LF_MOV->CODVAL
FLAGS "U"
GROUP 3
@ -473,11 +395,12 @@ BEGIN
OUTPUT F_VALUTA CODTAB
OUTPUT F_CAMBIO R10
CHECKTYPE NORMAL
WARNING "Codice valuta assente"
END
NUMBER F_CAMBIO 15 5
NUMBER F_CAMBIO 12 5
BEGIN
PROMPT 20 16 "Cambio "
PROMPT 20 12 "Cambio "
FIELD LF_MOV->CAMBIO
FLAGS "RU"
GROUP 3
@ -486,10 +409,87 @@ END
BOOLEAN F_VISVAL
BEGIN
PROMPT 47 16 "Visualizza importi in valuta"
PROMPT 47 12 "Visualizza importi in valuta"
GROUP 3
END
NUMBER F_TOTALE 15
BEGIN
PROMPT 1 13 "Totale documento "
FIELD TOTDOC
FLAGS "RV"
PICTURE "."
END
NUMBER F_RITFIS 15
BEGIN
PROMPT 1 14 "Ritenute fiscali "
FIELD RITFIS
FLAGS "RV"
PICTURE "."
END
NUMBER F_RITSOC 15
BEGIN
PROMPT 1 15 "Ritenute sociali "
FIELD LF_MOV->RITSOC
FLAGS "RV"
PICTURE "."
END
STRING F_CODIVA 4
BEGIN
PROMPT 60 13 "Codice IVA "
FLAGS "U"
USE %IVA
INPUT CODTAB F_CODIVA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "%@6" R0
DISPLAY "Tipo" S1
OUTPUT F_CODIVA CODTAB
CHECKTYPE NORMAL
WARNING "Codice IVA assente"
END
DATE F_DATA74TER
BEGIN
PROMPT 54 14 "Data 74/ter "
CHECKTYPE REQUIRED
FIELD DATA74TER
END
NUMBER F_ANNORIF 4
BEGIN
PROMPT 45 15 "Rif.partita "
FLAGS "A"
HELP "Anno di riferimento partita"
CHECKTYPE REQUIRED
END
STRING F_NUMRIF 7
BEGIN
PROMPT 68 15 "/ "
HELP "Numero documento (o protocollo IVA) di riferimento"
CHECKTYPE REQUIRED
END
NUMBER F_CORRLIRE 15
BEGIN
PROMPT 1 16 "Corrispettivo Lire "
FIELD LF_MOV->CORRLIRE
FLAGS "R"
PICTURE "."
END
NUMBER F_CORRVALUTA 15
BEGIN
PROMPT 45 16 "Corrisp. valuta "
FIELD LF_MOV->CORRVALUTA
FLAGS "R"
PICTURE "."
END
ENDPAGE
PAGE "IVA" -1 -1 77 20

View File

@ -653,7 +653,7 @@ bool TPrimanota_application::codiva_handler(TMask_field& f, KEY key)
bool TPrimanota_application::detrazione_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE && app().iva() == iva_acquisti)
if (key == K_TAB && f.dirty() && app().iva() == iva_acquisti)
{
TMask_field& ci = f.mask().field(101);
ci.set_dirty();
@ -1299,12 +1299,29 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
{
TMask& m = f.mask();
app().add_cgs_tot(m);
TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file();
const int alleg = clifo.get_int(CLI_ALLEG);
TEdit_field& upi = m.efield(F_RIEPILOGO);
upi.check_type(alleg == 3 ? CHECK_REQUIRED : CHECK_NORMAL);
if (clifo.get_bool(CLI_OCCAS))
m.send_key(K_SPACE, F_OCCASEDIT); // Lancia maschera occasionali
if (m.field(F_VISVAL).active())
{
const TString16 valuta(clifo.get("CODVAL"));
if (valuta.not_empty() && valuta != m.get(F_VALUTA))
{
TTable val("%val");
val.put("CODTAB", valuta);
if (val.read() == NOERR)
{
m.set(F_VALUTA, valuta);
m.set(F_CAMBIO, val.get("R0"), TRUE);
}
}
}
}
return TRUE;
}
@ -1342,19 +1359,22 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
if (key == K_TAB && f.get().not_empty())
{
const real imp(app().ivas().row(1).get(0)); // Se il totale non e' stato spezzato
if (imp == ZERO)
if (imp.is_zero())
{
TToken_string& row = app().ivas().row(0);
TMask& m = f.mask();
iva_notify(0, K_SPACE);
const TCodiceIVA iva(f.get());
const bool corr = app().causale().corrispettivi();
real tot = app().totale_documento();
real imposta;
if (!corr)
const bool acq3 = (app().iva() == iva_acquisti) && (row.get_int(2) == 3);
real tot = app().totale_documento(); // Calcola totale documento
real imposta; // Calcola imposta
if (!corr && !acq3)
imposta = app().scorpora(tot, iva.percentuale());
TToken_string& row = app().ivas().row(0);
row.add(tot.string(), 0); // imponibile
row.add(imposta.string(), 3); // imposta
@ -1440,22 +1460,29 @@ bool TPrimanota_application::ritsoc_handler(TMask_field& f, KEY key)
return TRUE;
}
bool TPrimanota_application::cambio_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
if (f.get().empty())
f.set(f.mask().exchange().string());
else
f.mask().field(F_VISVAL).on_hit();
}
return TRUE;
}
// Handler of F_VISVAL
// Certified 90%
// Certified 99%
bool TPrimanota_application::visval_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
{
TMask& m = f.mask();
const real e(f.get() == "X" ? m.get(F_CAMBIO) : "1");
if (e > ZERO)
m.set_exchange(e);
else
{
error_box("Impostare un valore maggiore di zero per il cambio");
f.reset();
}
const bool on = f.get().not_empty();
const real e(f.mask().get(F_CAMBIO));
m.set_exchange(on, e);
}
return TRUE;
}

View File

@ -42,6 +42,7 @@ class TPrimanota_application : public TRelation_application
bool _ges_val, _ges_sal; // Gestione valuta e saldaconto
bool _rif_par; // Riferimento parita (NUM_DOC | PROTIVA)
bool _savenew; // Registra e nuovo
bool _iva_showed; // Lo sheet IVA e' gia' stato visualizzato una volta?
TSaldo_agg _saldi; // Saldi da aggiornare
@ -65,6 +66,7 @@ class TPrimanota_application : public TRelation_application
static bool ritfis_handler(TMask_field& f, KEY key);
static bool ritsoc_handler(TMask_field& f, KEY key);
static bool main_codiva_handler(TMask_field& f, KEY key);
static bool cambio_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_handler(TMask_field& f, KEY key);