Gestione saldaconto

git-svn-id: svn://10.65.10.50/trunk@1148 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-03-22 09:04:45 +00:00
parent e5be670ab1
commit 69c57c5a6f
16 changed files with 608 additions and 400 deletions

View File

@ -39,11 +39,13 @@
#define F_DENCOMNASC 135 #define F_DENCOMNASC 135
#define F_CODSTAT 130 #define F_CODSTAT 130
#define F_CODPAG 131 #define F_CODPAG 131
#define F_DESPAG 231
#define F_RAGSOC1 132 #define F_RAGSOC1 132
#define F_CODABI 133 #define F_CODABI 133
#define F_CODBAN 134 #define F_CODBAN 134
#define F_DESBAN 140 #define F_DESBAN 140
#define F_CODVAL 136 #define F_CODVAL 136
#define F_DESVAL 236
#define F_FIDO 139 #define F_FIDO 139
#define F_LOCALITACF 144 #define F_LOCALITACF 144
#define F_CODAG 145 #define F_CODAG 145
@ -59,6 +61,7 @@
#define F_PTEL3 155 #define F_PTEL3 155
#define F_TEL3 156 #define F_TEL3 156
#define F_CODLIN 157 #define F_CODLIN 157
#define F_DESLIN 257
#define F_TIPOCFVEN 158 #define F_TIPOCFVEN 158
#define F_CODCFVEN 159 #define F_CODCFVEN 159

View File

@ -114,8 +114,7 @@ TMask* TPrimanota_application::load_mask(int n)
TMask& cgm = cg.sheet_mask(); TMask& cgm = cg.sheet_mask();
if (n == 1) // movimento non IVA if (n == 1) // movimento non IVA
{ {
cgm.set_handler(100, showpartite_handler); // bottoncino riga
m->set_handler(S_TOTDOC, totdoc_handler); m->set_handler(S_TOTDOC, totdoc_handler);
m->set_handler(S_SPESE, speserimb_handler); m->set_handler(S_SPESE, speserimb_handler);
m->set_handler(S_ALSPESE, altrespese_handler); m->set_handler(S_ALSPESE, altrespese_handler);
@ -124,6 +123,7 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(S_RITPROF, ritprof_handler); m->set_handler(S_RITPROF, ritprof_handler);
m->set_handler(S_DIFFCAMB, diffcamb_handler); m->set_handler(S_DIFFCAMB, diffcamb_handler);
} }
cgm.set_handler(101, dareavere_handler); cgm.set_handler(101, dareavere_handler);
cgm.set_handler(102, dareavere_handler); cgm.set_handler(102, dareavere_handler);
cgm.set_handler(105, cg_conto_handler); cgm.set_handler(105, cg_conto_handler);
@ -190,7 +190,6 @@ bool TPrimanota_application::user_destroy()
if (_msk[m] != NULL) delete _msk[m]; if (_msk[m] != NULL) delete _msk[m];
if (_pag) delete _pag; if (_pag) delete _pag;
if (_pag_rows != NULL) delete _pag_rows;
delete _giornale; delete _giornale;
delete _causale; delete _causale;
@ -220,14 +219,15 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (cod != NULL) if (cod != NULL)
ok = causale().read(cod, year); ok = causale().read(cod, year);
bool nob = FALSE, dob = FALSE, sal = FALSE; bool nob = FALSE, dob = FALSE;
TipoIVA iva = nessuna_iva; TipoIVA iva = nessuna_iva;
_is_saldaconto = FALSE;
if (ok) if (ok)
{ {
_is_saldaconto = sal = gestione_saldaconto() && causale().saldaconto(); _is_saldaconto = gestione_saldaconto() && causale().saldaconto();
dob = sal | causale().data_doc(); dob = _is_saldaconto | causale().data_doc();
nob = sal | causale().num_doc(); nob = _is_saldaconto | causale().num_doc();
iva = causale().iva(); iva = causale().iva();
} }
@ -239,20 +239,28 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio
m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
if (iva != nessuna_iva) if (iva == nessuna_iva)
{
TMask& cgm = cgs().sheet_mask();
cgm.set_handler(100, _is_saldaconto ? showpartite_handler : NULL); // bottoncino riga
cgm.enable(100, _is_saldaconto);
}
else
{ {
m->enable_page(2, sal); m->enable_page(2, _is_saldaconto);
m->efield(F_CODPAG).check_type(sal ? CHECK_REQUIRED : CHECK_NORMAL);// Cod. pag. obbligatorio m->efield(F_CODPAG).check_type(_is_saldaconto ? CHECK_REQUIRED : CHECK_NORMAL);// Cod. pag. obbligatorio
const bool av = causale().reg().agenzia_viaggi();
m->show(F_DATA74TER, av);
if (!av) m->reset(F_DATA74TER);
m->show(F_ANNORIF, sal); // Mostra/nasconde anno e riferimento partita m->show(F_ANNORIF, _is_saldaconto); // Mostra/nasconde anno e riferimento partita
m->show(F_NUMRIF, sal); m->show(F_NUMRIF, _is_saldaconto);
m->enable(F_ANNORIF, ins); // Dis/abilita anno e riferimento partita m->enable(F_ANNORIF, ins); // Dis/abilita anno e riferimento partita
m->enable(F_NUMRIF, ins); m->enable(F_NUMRIF, ins);
m->field(F_NUMRIF).set_justify(iva == iva_acquisti ? _num_for : _num_cli); m->field(F_NUMRIF).set_justify(iva == iva_acquisti ? _num_for : _num_cli);
const bool av = causale().reg().agenzia_viaggi();
m->show(F_DATA74TER, av);
if (!av) m->reset(F_DATA74TER);
if (ins) if (ins)
{ {
@ -288,9 +296,8 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (err) if (err)
{ {
error_box("Il conto %d %d %ld della causale e' %s", error_box("Il conto della riga %d della causale e' %s",
tc.gruppo(), tc.conto(), tc.sottoconto(), i, err == 1 ? "sconosciuto" : "sospeso");
err == 1 ? "sconosciuto" : "sospeso");
continue; continue;
} }
@ -302,18 +309,23 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (iva == nessuna_iva) if (iva == nessuna_iva)
{ {
char tipr = ' ';
// non si cagano gli importi totali // non si cagano gli importi totali
if (nriga < 8) continue; if (nriga < 8) continue;
switch(nriga) char tipr = ' ';
if (_is_saldaconto) switch(nriga)
{ {
case 8: tipr = 'P'; break; case 8:
case 9: tipr = 'A'; break; tipr = 'P'; break;
case 10: tipr = 'G'; break; case 9:
case 11: tipr = 'R'; break; tipr = 'A'; break;
} case 10:
tipr = 'G'; break;
case 11:
tipr = 'R'; break;
default:
tipr = ' '; break;
}
const int pos = set_cgs_row(-1,zero,tc,desc,tipr); const int pos = set_cgs_row(-1,zero,tc,desc,tipr);
if (sezione > ' ') if (sezione > ' ')
cgs().disable_cell(pos, sezione == 'A' ? 0 : 1); cgs().disable_cell(pos, sezione == 'A' ? 0 : 1);
@ -335,6 +347,8 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
return ok; return ok;
} }
// Certified 100%
void TPrimanota_application::print() void TPrimanota_application::print()
{ {
TExternal_app stampa("cg3 -0"); TExternal_app stampa("cg3 -0");
@ -433,7 +447,11 @@ void TPrimanota_application::init_mask(TMask& m)
const bool valintra = causale().valintra(); const bool valintra = causale().valintra();
const bool corrisp = causale().corrispettivi(); const bool corrisp = causale().corrispettivi();
if (_iva != nessuna_iva) if (_iva == nessuna_iva)
{
m.enable(-5, _is_saldaconto); // Abilita campi saldaconto
}
else
{ {
char clig, forg; char clig, forg;
if (_iva == iva_acquisti) if (_iva == iva_acquisti)
@ -539,27 +557,6 @@ void TPrimanota_application::init_modify_mode(TMask& m)
calcola_imp(); // Calcola totale imponibile ed imposte calcola_imp(); // Calcola totale imponibile ed imposte
} }
// Legge un conto da una riga contabile o iva di prima nota
bool TPrimanota_application::get_conto(const TRectype& r, TBill& c) const
{
c.set(r.get_int("GRUPPO"), r.get_int("CONTO"),
r.get_long("SOTTOCONTO"), r.get_char("TIPOC"));
if (r.num() == LF_RMOVIVA)
c.tipo_cr(r.get_int("TIPOCR"));
return c.ok();
}
// Scrive un conto su una riga di prima nota
void TPrimanota_application::put_conto(TRectype& r, const TBill& c) const
{
r.put("TIPOC", c.tipo());
r.put("GRUPPO", c.gruppo());
r.put("CONTO", c.conto());
r.put("SOTTOCONTO", c.sottoconto());
}
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE) // Controlla sulla causale se il segno del totale documento (ritsoc=FALSE)
// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale // o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale
bool TPrimanota_application::test_swap(bool ritsoc) bool TPrimanota_application::test_swap(bool ritsoc)
@ -618,7 +615,7 @@ int TPrimanota_application::read(TMask& m)
TImporto import(sezione, im); TImporto import(sezione, im);
import.add_to(riga); // Dare/Avere 101-102 import.add_to(riga); // Dare/Avere 101-102
TBill conto; get_conto(r, conto); TBill conto; conto.get(r);
riga.add(conto.string(0x3)); // Conto 103-107 riga.add(conto.string(0x3)); // Conto 103-107
_saldi.aggiorna(conto, im, sezione, FALSE); _saldi.aggiorna(conto, im, sezione, FALSE);
@ -676,7 +673,7 @@ int TPrimanota_application::read(TMask& m)
} }
riga.add(imposta.string()); // Imposta 104 riga.add(imposta.string()); // Imposta 104
TBill c; get_conto(r, c); TBill c; c.get(r);
c.add_to(riga, 4, 0x7); // Conto 105-110 c.add_to(riga, 4, 0x7); // Conto 105-110
ivas().row(i) = riga; ivas().row(i) = riga;
@ -732,7 +729,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
r.put("SEZIONE", n.sezione()); // Sezione r.put("SEZIONE", n.sezione()); // Sezione
r.put("IMPORTO", n.valore()); // Importo r.put("IMPORTO", n.valore()); // Importo
put_conto(r, conto); // Conto conto.put(r); // Conto
row.get(); // Codice descrizione row.get(); // Codice descrizione
r.put("DESCR", row.get()); // Descrizione riga r.put("DESCR", row.get()); // Descrizione riga
@ -816,7 +813,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
const TBill c(row, -1, 0x1); const TBill c(row, -1, 0x1);
const int rimp = bill2pos(c, 'I')+1; const int rimp = bill2pos(c, 'I')+1;
r.put("RIGAIMP", rimp); r.put("RIGAIMP", rimp);
put_conto(r, c); c.put(r);
} }
} }
@ -859,16 +856,16 @@ int TPrimanota_application::write(const TMask& m)
if (iva() != nessuna_iva) if (iva() != nessuna_iva)
{ {
causale().reg().reread(); // Aggiorna protocollo IVA causale().reg().reread(); // Aggiorna protocollo IVA
if (!gestione_saldaconto() && !m.get_bool(F_SOLAIVA)) if (_is_saldaconto)
{ write_scadenze(m);
const TString16 causimm(causale().causale_inc_imm()); else
if (causimm.not_empty()) if (!m.get_bool(F_SOLAIVA))
genera_incasso(causimm); {
} const TString16 causimm(causale().causale_inc_imm());
if (causimm.not_empty())
genera_incasso(causimm);
}
} }
if (gestione_saldaconto() && causale().saldaconto())
write_scadenze(m);
} }
return err; return err;
} }
@ -883,7 +880,7 @@ int TPrimanota_application::rewrite(const TMask& m)
_saldi.registra(); _saldi.registra();
check_saldi(); check_saldi();
} }
if (gestione_saldaconto() && causale().saldaconto()) if (_is_saldaconto && iva() != nessuna_iva)
write_scadenze(m); write_scadenze(m);
return err; return err;
} }
@ -916,7 +913,7 @@ HIDDEN bool incasso_handler(TMask_field& f, KEY k)
const TImporto imp(m.get(sid)[0], val); const TImporto imp(m.get(sid)[0], val);
tot += imp; tot += imp;
} }
if (tot.valore() != ZERO) if (!tot.is_zero())
return f.error_box("Il movimento e' sbilaciato di %s", tot.valore().string(".")); return f.error_box("Il movimento e' sbilaciato di %s", tot.valore().string("."));
} }
return TRUE; return TRUE;
@ -926,7 +923,7 @@ HIDDEN bool incasso_handler(TMask_field& f, KEY k)
void TPrimanota_application::genera_incasso(const char* causimm) void TPrimanota_application::genera_incasso(const char* causimm)
{ {
TMask m("cg2100i"); TMask m("cg2100i");
if (iva() == iva_acquisti) m.set_caption("Movimento di TPagamento immediato"); if (iva() == iva_acquisti) m.set_caption("Movimento di pagamento immediato");
m.set_handler(F_DATAREG, datareg_handler); m.set_handler(F_DATAREG, datareg_handler);
m.set_handler(F_DATACOMP, datacomp_handler); m.set_handler(F_DATACOMP, datacomp_handler);
@ -1053,7 +1050,7 @@ void TPrimanota_application::genera_incasso(const char* causimm)
for (int r = 0; r < i; r++) for (int r = 0; r < i; r++)
{ {
const TRectype& rec = inc.cg(r); const TRectype& rec = inc.cg(r);
TBill c; get_conto(rec, c); TBill c; c.get(rec);
const real im(rec.get("IMPORTO")); const real im(rec.get("IMPORTO"));
const char sezione = rec.get_char("SEZIONE"); const char sezione = rec.get_char("SEZIONE");
_saldi.aggiorna(c, im, sezione, TRUE); _saldi.aggiorna(c, im, sezione, TRUE);

View File

@ -127,5 +127,17 @@
#define K_ANNOES 514 #define K_ANNOES 514
#define K_DATACOMP 515 #define K_DATACOMP 515
// Scadenze
#define S_ANNO 101
#define S_NUM 102
#define S_SCADENZE 103
#define S_RATA 101
#define S_DATA 102
#define S_IMPORTOVAL 103
#define S_IMPORTO 104
#define S_DESCR 105
#define S_TIPO 106
#endif #endif

View File

@ -19,7 +19,7 @@ BEGIN
FLAGS "FRD" FLAGS "FRD"
USE LF_NDITTE KEY 1 USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA OUTPUT K_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
@ -35,8 +35,7 @@ NUMBER F_NUMREG 7
BEGIN BEGIN
PROMPT 56 3 "Operazione n. " PROMPT 56 3 "Operazione n. "
FIELD NUMREG FIELD NUMREG
FLAGS "RD" FLAGS "DGR"
KEY 1
MESSAGE COPY,K_NUMREG MESSAGE COPY,K_NUMREG
END END
@ -46,6 +45,7 @@ BEGIN
HELP "Data in cui viene effettuata l'operazione" HELP "Data in cui viene effettuata l'operazione"
FIELD DATAREG FIELD DATAREG
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,K_DATAREG
END END
@ -55,6 +55,7 @@ BEGIN
HELP "Data di competenza dell'operazione" HELP "Data di competenza dell'operazione"
FIELD DATACOMP FIELD DATACOMP
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,K_DATACOMP
END END
NUMBER F_ANNOES 4 NUMBER F_ANNOES 4
@ -62,7 +63,7 @@ BEGIN
PROMPT 56 4 "Esercizio " PROMPT 56 4 "Esercizio "
FIELD ANNOES FIELD ANNOES
MESSAGE COPY,K_ANNOES MESSAGE COPY,K_ANNOES
FLAGS "DZ" FLAGS "DGZ"
END END
STRING F_CODCAUS 3 STRING F_CODCAUS 3
@ -203,66 +204,72 @@ END
NUMBER S_TOTDOC 15 0 NUMBER S_TOTDOC 15 0
BEGIN BEGIN
PROMPT 1 10 "Totale documento " PROMPT 1 10 "Totale documento "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
GROUPBOX DLG_NULL 78 7 GROUPBOX DLG_NULL 78 9
BEGIN BEGIN
PROMPT 0 11 "Voci di spesa" PROMPT 0 9 "Voci di spesa per saldaconto"
END END
NUMBER S_SPESE 15 0 NUMBER S_SPESE 15 0
BEGIN BEGIN
PROMPT 1 12 "Spese e rimborsi " PROMPT 1 12 "Spese e rimborsi "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
NUMBER S_ALSPESE 15 0 NUMBER S_ALSPESE 15 0
BEGIN BEGIN
PROMPT 39 12 "Altre spese " PROMPT 39 12 "Altre spese "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
NUMBER S_ABBATT 15 0 NUMBER S_ABBATT 15 0
BEGIN BEGIN
PROMPT 1 14 "Abbuoni attivi " PROMPT 1 14 "Abbuoni attivi "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
NUMBER S_ABBPASS 15 0 NUMBER S_ABBPASS 15 0
BEGIN BEGIN
PROMPT 39 14 "Abbuoni passivi " PROMPT 39 14 "Abbuoni passivi "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
NUMBER S_RITPROF 15 0 NUMBER S_RITPROF 15 0
BEGIN BEGIN
PROMPT 1 16 "Ritenuta prof. " PROMPT 1 16 "Ritenuta prof. "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
NUMBER S_DIFFCAMB 15 0 NUMBER S_DIFFCAMB 15 0
BEGIN BEGIN
PROMPT 39 16 "Diff. cambio " PROMPT 39 16 "Diff. cambio "
HELP "" HELP ""
FLAGS "R" FLAGS "R"
PICTURE "." PICTURE "."
GROUP 5
END END
ENDPAGE ENDPAGE
@ -289,15 +296,12 @@ END
NUMBER K_NUMREG 7 NUMBER K_NUMREG 7
BEGIN BEGIN
PROMPT 56 3 "Operazione n. " PROMPT 56 3 "Operazione n. "
FIELD NUMREG
FLAGS "RD" FLAGS "RD"
KEY 1
END END
DATE K_DATAREG DATE K_DATAREG
BEGIN BEGIN
PROMPT 1 3 "Data operazione " PROMPT 1 3 "Data operazione "
HELP "Data in cui viene effettuata l'operazione"
FLAGS "D" FLAGS "D"
END END
@ -305,35 +309,30 @@ END
DATE K_DATACOMP DATE K_DATACOMP
BEGIN BEGIN
PROMPT 1 4 "Data di competenza " PROMPT 1 4 "Data di competenza "
HELP "Data di competenza dell'operazione"
FLAGS "D" FLAGS "D"
END END
NUMBER K_ANNOES 4 NUMBER K_ANNOES 4
BEGIN BEGIN
PROMPT 56 4 "Esercizio " PROMPT 56 4 "Esercizio "
FIELD ANNOES FLAGS "DZ"
FLAGS "D"
END END
STRING K_CODCAUS 3 STRING K_CODCAUS 3
BEGIN BEGIN
PROMPT 1 5 "Causale " PROMPT 1 5 "Causale "
HELP "Codice della causale generante l'operazione"
FLAGS "D" FLAGS "D"
END END
STRING K_DESCRCAUS 50 STRING K_DESCRCAUS 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
HELP "Descrizione della causale generante l'operazione"
FLAGS "D" FLAGS "D"
END END
LIST K_PROVVISORIO 1 25 LIST K_PROVVISORIO 1 25
BEGIN BEGIN
PROMPT 1 6 "Movimento provvisorio " PROMPT 1 6 "Movimento provvisorio "
HELP "Indicare se si tratta di movimento provvisorio"
ITEM " |No (movimento normale)" ITEM " |No (movimento normale)"
ITEM "P|Si (cancellabile)" ITEM "P|Si (cancellabile)"
ITEM "N|Si (non cancellabile)" ITEM "N|Si (non cancellabile)"
@ -350,14 +349,12 @@ END
DATE K_DATADOC DATE K_DATADOC
BEGIN BEGIN
PROMPT 1 7 "Data del documento " PROMPT 1 7 "Data del documento "
HELP "Data del documento generante il movimento"
FLAGS "D" FLAGS "D"
END END
STRING K_NUMDOC 7 STRING K_NUMDOC 7
BEGIN BEGIN
PROMPT 56 7 "Documento n. " PROMPT 56 7 "Documento n. "
HELP "Numero del documento generante il movimento"
FLAGS "D" FLAGS "D"
END END
@ -402,4 +399,4 @@ ENDMASK
#include "cg21cg.uml" #include "cg21cg.uml"
z z

View File

@ -91,8 +91,11 @@ real TPrimanota_application::totale_documento()
bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k) bool TPrimanota_application::showpartite_handler(TMask_field& f, KEY k)
{ {
if (k == K_SPACE) if (k == K_SPACE)
{ {
warning_box("TRULLALLERO TRULLALLA\', LA PARTITA ECCOLA QUA!"); TSheet_field& s = app().cgs();
TToken_string& r = s.row(s.selected());
const TBill c(r, 2, 0x1);
app().edit_partite(c);
} }
return TRUE; return TRUE;
@ -390,7 +393,7 @@ return n;
HIDDEN int compare_rows(const TObject** o1, const TObject** o2) HIDDEN int compare_rows(const TObject** o1, const TObject** o2)
{ {
// Totale, Rit.Fisc., Rit.Soc., da riga IVA, riga contabile, IVA detr., IVA non detr. // Totale, Rit.Fisc., Rit.Soc., da riga IVA, riga contabile, IVA detr., IVA non detr.
static char* sort_order = "TFSI DN"; const char* const sort_order = "TFSI DNGAPRLC";
const TToken_string* r1 = (const TToken_string*)*o1; const TToken_string* r1 = (const TToken_string*)*o1;
const TToken_string* r2 = (const TToken_string*)*o2; const TToken_string* r2 = (const TToken_string*)*o2;
@ -1085,6 +1088,7 @@ bool TPrimanota_application::cg_conto_handler(TMask_field& f, KEY key)
return TRUE; return TRUE;
} }
// Gestore del sottoconto dello sheet IVA
bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key) bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key)
{ {
if (!suspended_handler(f, key)) if (!suspended_handler(f, key))
@ -1649,12 +1653,14 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
bool TPrimanota_application::totale_handler(TMask_field& f, KEY key) bool TPrimanota_application::totale_handler(TMask_field& f, KEY key)
{ {
bool ok = TRUE; bool ok = TRUE;
TMask& m = f.mask();
if (key == K_TAB && f.focusdirty()) if (key == K_TAB && f.focusdirty())
{ {
app().add_cgs_tot(f.mask()); app().add_cgs_tot(m);
f.mask().field(F_CODIVA).on_hit(); m.field(F_CODIVA).on_hit();
if (app().is_saldaconto() && !(f.mask().get(F_CODPAG).blank())) if (app().is_saldaconto() && m.get(F_CODPAG).not_empty())
app().set_scadenze(f.mask()); app().set_scadenze(m);
} }
if (key == K_ENTER && f.get().empty()) if (key == K_ENTER && f.get().empty())

View File

@ -62,7 +62,7 @@ class TPrimanota_application : public TRelation_application
int _mode; // Modo maschera corrente int _mode; // Modo maschera corrente
TBill _conto_ricavo; // Conto di ricavo del clifo TBill _conto_ricavo; // Conto di ricavo del clifo
TArray* _pag_rows; TString_array _pag_rows;
static bool showpartite_handler(TMask_field& f, KEY k); static bool showpartite_handler(TMask_field& f, KEY k);
static bool speserimb_handler(TMask_field& f, KEY k); static bool speserimb_handler(TMask_field& f, KEY k);
@ -113,12 +113,14 @@ class TPrimanota_application : public TRelation_application
void reset_sheet_row(TSheet_field& s, int n); void reset_sheet_row(TSheet_field& s, int n);
protected: protected: // TApplication
virtual bool user_create();
virtual bool user_destroy();
virtual void print();
virtual void on_firm_change(); virtual void on_firm_change();
virtual void on_config_change(); virtual void on_config_change();
virtual void print();
protected: // TRelation_application
virtual bool user_create();
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; }
@ -132,15 +134,13 @@ protected:
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
virtual bool remove(); virtual bool remove();
protected:
void check_saldi(); void check_saldi();
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(const TRectype& r, TBill& c) const;
void put_conto(TRectype& r, const TBill& c) const;
void mask2rel(const TMask& m); void mask2rel(const TMask& m);
TipoIVA iva() const { return _iva; } TipoIVA iva() const { return _iva; }
@ -156,7 +156,7 @@ protected:
TSheet_field& cgs() const; TSheet_field& cgs() const;
TSheet_field& ivas() const; TSheet_field& ivas() const;
TSheet_field& pags() const; TSheet_field& pags() const;
TArray* pag_rows() const { return _pag_rows; } TString_array& pag_rows() { return _pag_rows; }
static int bill2pos(const TBill& conto, char tipo); static int bill2pos(const TBill& conto, char tipo);
static TipoIVA reg2IVA(const char* registro, int anno); static TipoIVA reg2IVA(const char* registro, int anno);
@ -194,7 +194,7 @@ protected:
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 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_tot_noiva(TMask& m);
void add_cgs_rit(bool fisc); void add_cgs_rit(bool fisc);
void add_cgs_row_noniva(TipoConto t); void add_cgs_row_noniva(TipoConto t);
void generazione_righe_cg(int r); void generazione_righe_cg(int r);
@ -202,12 +202,13 @@ protected:
void reset_cgs_row(int n) { reset_sheet_row(cgs(), n); } void reset_cgs_row(int n) { reset_sheet_row(cgs(), n); }
void reset_ivas_row(int n) { reset_sheet_row(ivas(), n); } void reset_ivas_row(int n) { reset_sheet_row(ivas(), n); }
TPagamento* pagamento() { return _pag; } TPagamento& pagamento() { CHECK(_pag, "Pagamento nullo"); return *_pag; }
void set_pagamento(const char* c, const char* d); void set_pagamento(const char* c, const char* d);
void reset_pagamento(); void reset_pagamento();
void set_scadenze(TMask& m); void set_scadenze(TMask& m);
bool read_scadenze(const TMask& m); bool read_scadenze(const TMask& m);
void write_scadenze(const TMask& m); void write_scadenze(const TMask& m);
bool edit_partite(const TBill& b);
static TPrimanota_application& app() { return (TPrimanota_application&)main_app(); } static TPrimanota_application& app() { return (TPrimanota_application&)main_app(); }

View File

@ -3,18 +3,22 @@
// fv 24/8/94 // fv 24/8/94
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <sheet.h>
#include "cg2102.h" #include "cg2102.h"
#include "cg2100.h" #include "cg2100.h"
#include "cg21sld.h" #include "cg21sld.h"
#include "pagament.h" #include "pagament.h"
#include <partite.h>
#include <scadenze.h>
bool TPrimanota_application::pag_notify(int r, KEY k) bool TPrimanota_application::pag_notify(int r, KEY k)
{ {
TPagamento* pag = app().pagamento(); TPagamento& pag = app().pagamento();
TSheet_field* ps = &(app().pags()); TSheet_field& ps = app().pags();
TMask* msk = &(app().curr_mask()); TMask* msk = &(app().curr_mask());
TArray* rws = app().pag_rows(); TString_array& rws = app().pag_rows();
int rdiff = atoi(msk->get(FS_RDIFFER)); int rdiff = atoi(msk->get(FS_RDIFFER));
@ -35,8 +39,8 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
case K_SPACE: case K_SPACE:
break; break;
case K_ENTER: case K_ENTER:
ns = ps->row(r); ns = ps.row(r);
ts = (TToken_string&)(*rws)[r]; ts = rws.row(r);
news = ns.get(0); news = ns.get(0);
newp = ns.get(1); newp = ns.get(1);
@ -44,15 +48,15 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
newt = ns.get(3); newt = ns.get(3);
// qui viene il bello, si fa per dire // qui viene il bello, si fa per dire
if (strcmp(ts.get(0),news) != 0) // modificata data scadenza if (news != ts.get(0)) // modificata data scadenza
{ {
mod = m_scad = TRUE; mod = m_scad = TRUE;
} }
if (strcmp(ts.get(1),newp) != 0) // modificata percentuale if (newp != ts.get(1)) // modificata percentuale
{ {
mod = m_perc = TRUE; mod = m_perc = TRUE;
} }
if (strcmp(ts.get(2),newi) != 0) // modificato importo if (newi != ts.get(2)) // modificato importo
{ {
// se si modifica la percentuale l'importo non viene cagato // se si modifica la percentuale l'importo non viene cagato
if ((recalc && !m_perc) || (!recalc)) if ((recalc && !m_perc) || (!recalc))
@ -60,7 +64,7 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
mod = m_imp = TRUE; mod = m_imp = TRUE;
} }
} }
if (strcmp(ts.get(3),newt) != 0) // modificato tipo pagamento if (newt != ts.get(3)) // modificato tipo pagamento
{ {
mod = m_tipo = TRUE; mod = m_tipo = TRUE;
} }
@ -83,67 +87,67 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
if (mod && recalc) if (mod && recalc)
{ {
// ricalcola sheet come sai fare tu // ricalcola sheet come sai fare tu
ahiahi = pag->recalc_rate(r, m_perc, ahiahi = pag.recalc_rate(r, m_perc,
((m_perc || m_imp) ? ((m_perc || m_imp) ?
(m_perc ? (const char*)newp : (const char*)newi) : (m_perc ? (const char*)newp : (const char*)newi) :
NULL), NULL),
(m_scad ? (const char*)news : NULL), (m_scad ? (const char*)news : NULL),
(m_tipo ? (const char*)newt : NULL), (m_tipo ? (const char*)newt : NULL),
rdiff, mcomm, need_recalc); rdiff, mcomm, need_recalc);
// see if rdiff changed // see if rdiff changed
msk->field(FS_RDIFFER).set(pag->rate_differenziate() ? "1" : "2"); msk->field(FS_RDIFFER).set(pag.rate_differenziate() ? "1" : "2");
} }
if (!recalc) if (!recalc)
{ {
ahiahi = P_OK; ahiahi = P_OK;
// put data as they are // put data as they are
TToken_string& trw = pag->rata(r); TToken_string& trw = pag.rata(r);
TToken_string srw = trw; TToken_string srw = trw;
if (m_scad) trw.add(news,3); if (m_scad) trw.add(news,3);
if (m_perc) trw.add(newp,1); if (m_perc) trw.add(newp,1);
if (m_imp) trw.add(newi,4); if (m_imp) trw.add(newi,4);
if (m_tipo) trw.add(newt,2); if (m_tipo) trw.add(newt,2);
// validate the payment // validate the payment
if ((ahiahi = pag->validate()) != P_OK) if ((ahiahi = pag.validate()) != P_OK)
pag->rata(r) = srw; pag.rata(r) = srw;
} }
if (ahiahi) // any error? if (ahiahi) // any error? Rimetti le righe com'erano prima
// rimetti le righe com'erano prima
{ {
beep(); beep();
// se gli errori sono voluti, spiegali // se gli errori sono voluti, spiegali
if (!recalc) if (!recalc)
{ {
TString s(256); TString256 s;
pag->strerr(ahiahi,s); pag.strerr(ahiahi,s);
warning_box(s); warning_box(s);
} }
ps->row(r) = (TToken_string&)(*rws)[r]; ps.row(r) = rws.row(r);
ps->force_update(r); ps.force_update(r);
} }
else if (recalc && mod && need_recalc) else if (recalc && mod && need_recalc)
{ {
// ridefinisci lo sheet sulla base delle nuove rate // ridefinisci lo sheet sulla base delle nuove rate
pag->set_sheet(*ps); pag.set_sheet(ps);
ps->force_update(-1); ps.force_update();
rws->destroy(); rws = ps.rows_array();
(*rws) = ps->rows_array(); }
}
} }
return doit; return doit;
} }
bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key) bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
{ {
if (key == K_TAB && f.focusdirty() && app().is_saldaconto()) TMask& m = f.mask();
if (key == K_TAB && (f.focusdirty() || !m.is_running()) && app().is_saldaconto())
{ {
TString dt(f.mask().get(F_DATAREG)); const TString16 dt(m.get(F_DATAREG));
app().set_pagamento(f.get(),dt); app().set_pagamento(f.get(), dt);
app().set_scadenze(f.mask()); app().set_scadenze(m);
} }
return TRUE; return TRUE;
} }
@ -159,49 +163,49 @@ void TPrimanota_application::set_scadenze(TMask& m)
real imponibile(0.0); real imponibile(0.0);
real imposta(0.0); real imposta(0.0);
real spese(0.0); real spese(0.0);
TString dt(m.get(F_DATAREG));
TPagamento& pag = pagamento();
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
if (pag.is_new())
if (_pag->is_new())
{ {
m.disable_page(2); m.disable_page(2);
return; return;
} }
else m.enable_page(2); else m.enable_page(2);
m.field(FS_RDIFFER).set(_pag->rate_differenziate() ? "1" : "2"); m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
m.field(FS_NAMEPAG).set(_pag->name()); m.set(FS_NAMEPAG, pag.name());
m.field(FS_TIPOPR).set(_pag->desc_tpr()); m.set(FS_TIPOPR, pag.desc_tpr());
m.field(FS_MCOMM).set(_pag->mese_commerciale() ? "X" : ""); m.set(FS_MCOMM, pag.mese_commerciale() ? "X" : "");
TSheet_field& iva_sh = ivas(); TSheet_field& iva_sh = ivas();
for (int i = 0; i < iva_sh.items(); i++) for (int i = 0; i < iva_sh.items(); i++)
{ {
TToken_string& tt = iva_sh.row(i); TToken_string& tt = iva_sh.row(i);
real mpo(tt.get(0)); const real mpo(tt.get(0));
real imp(tt.get(3));
imponibile += mpo; imponibile += mpo;
const real imp(tt.get(3));
imposta += imp; imposta += imp;
} }
m.field(FS_IMPONIBILE).set(imponibile.string()); m.set(FS_IMPONIBILE, imponibile.string());
m.field(FS_IMPOSTA).set(imposta.string()); m.set(FS_IMPOSTA, imposta.string());
m.field(FS_SPESE).set(spese.string()); m.set(FS_SPESE, spese.string());
m.field(FS_RECALC).set("X"); m.set(FS_RECALC, "X");
_pag->set_total(imponibile, imposta, spese); pag.set_total(imponibile, imposta, spese);
_pag->set_rate_auto(); pag.set_rate_auto();
bool new_part = TRUE; bool new_part = TRUE;
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
// prepara lo sheet // prepara lo sheet
_pag->set_sheet(ps); pag.set_sheet(ps);
if (_pag_rows != NULL) delete _pag_rows; _pag_rows = ps.rows_array();
_pag_rows = new TArray(ps.rows_array());
// se la prima rata e' fissa non si tocca // se la prima rata e' fissa non si tocca
if (_pag->tipo_prima_rata() > 0) if (pag.tipo_prima_rata() > 0)
{ {
ps.disable_cell(0,0); ps.disable_cell(0,0);
ps.disable_cell(0,1); ps.disable_cell(0,1);
@ -215,7 +219,6 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
real imponibile(0.0); real imponibile(0.0);
real imposta(0.0); real imposta(0.0);
real spese(0.0); real spese(0.0);
TString dt(m.get(F_DATAREG));
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET); TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
@ -237,8 +240,9 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
m.field(FS_IMPOSTA).set(imposta.string()); m.field(FS_IMPOSTA).set(imposta.string());
m.field(FS_SPESE).set(spese.string()); m.field(FS_SPESE).set(spese.string());
m.field(FS_RECALC).set("X"); m.field(FS_RECALC).set("X");
_pag->set_total(imponibile, imposta, spese); TPagamento& pag = pagamento();
pag.set_total(imponibile, imposta, spese);
TLocalisamfile partita (LF_PARTITE); TLocalisamfile partita (LF_PARTITE);
TLocalisamfile scadenza(LF_SCADENZE); TLocalisamfile scadenza(LF_SCADENZE);
@ -265,26 +269,26 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
int nriga = 1; int nriga = 1;
int numrig = 1; int numrig = 1;
partita.put("TIPOCF", tipocf); // partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo); // partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto); // partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto); // partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno); partita.put(PART_ANNO, anno);
partita.put("NUMPART", numpart); partita.put(PART_NUMPART, numpart);
partita.put("NRIGA", nriga); partita.put(PART_NRIGA, nriga);
bool fromscratch = FALSE; bool fromscratch = FALSE;
if (partita.read() == NOERR) if (partita.read() == NOERR)
{ {
// se si e' specificato un codice pagamento diverso si rifa' da capo // se si e' specificato un codice pagamento diverso si rifa' da capo
if (_pag->code() != partita.get("CODPAG")) if (pag.code() != partita.get("CODPAG"))
fromscratch = TRUE; fromscratch = TRUE;
// se invece la maschera contiene importi diversi da quelli // se invece la maschera contiene importi diversi da quelli
// registrati si passa la palla al culano // registrati si passa la palla al culano
else if (imponibile != partita.get_real("IMPORTO") || else if (imponibile != partita.get_real(PART_IMPORTO) ||
imposta != partita.get_real("IMPOSTA") || imposta != partita.get_real(PART_IMPOSTA) ||
spese != partita.get_real("SPESE")) spese != partita.get_real(PART_SPESE))
{ {
fromscratch = !yesno_box("Gli importi totali delle scadenze sono stati modificati rispetto" fromscratch = !yesno_box("Gli importi totali delle scadenze sono stati modificati rispetto"
" all'ultima registrazione. Si desidera mantenere" " all'ultima registrazione. Si desidera mantenere"
@ -293,32 +297,31 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
if(!fromscratch) m.field(FS_RECALC).set(""); if(!fromscratch) m.field(FS_RECALC).set("");
} }
if (fromscratch) if (fromscratch)
_pag->set_rate_auto(); pag.set_rate_auto();
else else
{ {
_pag->zap_rate(); pag.zap_rate();
for (int i = 0; ; i++) for (int i = 0; ; i++)
{ {
// cerca rata // cerca rata
scadenza.zero(); scadenza.zero();
scadenza.put("TIPOCF", tipocf); // scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo); // scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto); // scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto); // scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put(PART_ANNO, anno);
scadenza.put("NUMPART", numpart); scadenza.put(PART_NUMPART, numpart);
scadenza.put("NRATA", i+1); scadenza.put(PART_NRATA, i+1);
if (scadenza.read() == NOERR) if (scadenza.read() == NOERR)
{ {
real importo = scadenza.get("IMPORTOVAL"); const real importo = scadenza.get(SCAD_IMPORTO);
TDate scad = scadenza.get("DATASCAD"); const TDate scad = scadenza.get(SCAD_DATASCAD);
int tipop = scadenza.get_int("TIPOPAG"); const int tipop = scadenza.get_int(SCAD_TIPOPAG);
bool paid = scadenza.get_bool("PAGATA"); const bool paid = scadenza.get_bool(SCAD_PAGATA);
TString ulc(scadenza.get("ULTCLASS")); const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
pag.set_rata(i, importo, scad, tipop, ulc, paid);
_pag->set_rata(i, importo, scad, tipop, ulc, paid);
} }
else break; else break;
} // for } // for
@ -327,152 +330,124 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
else else
return FALSE; return FALSE;
_pag->set_sheet(ps); pag.set_sheet(ps);
_pag_rows = ps.rows_array();
if (_pag_rows != NULL) delete _pag_rows;
_pag_rows = new TArray(ps.rows_array());
// se la prima rata e' fissa non si tocca // se la prima rata e' fissa non si tocca
if (_pag->tipo_prima_rata() > 0) if (pag.tipo_prima_rata() > 0)
{ ps.disable_cell(0,-1);
ps.disable_cell(0,0);
ps.disable_cell(0,1);
ps.disable_cell(0,2);
ps.disable_cell(0,3);
}
return TRUE; return TRUE;
} }
void TPrimanota_application::write_scadenze(const TMask& m) void TPrimanota_application::write_scadenze(const TMask& m)
{ {
real imponibile(0.0); real imponibile(0.0);
real imposta(0.0); real imposta(0.0);
real spese(0.0); real spese(0.0);
// should never happen but it doesn't hurt // should never happen but it doesn't hurt
if (_rel->cg(0).empty()) return; CHECK(!_rel->cg(0).empty(), "Missing first line");
TLocalisamfile partita (LF_PARTITE); TLocalisamfile partita (LF_PARTITE);
TLocalisamfile scadenza(LF_SCADENZE); TLocalisamfile scadenza(LF_SCADENZE);
TString nreg(_rel->lfile().get("NUMREG")); TRectype& r = _rel->lfile().curr();
TString ndoc(_rel->lfile().get("NUMDOC"));
TString tmov(_rel->lfile().get("TIPOMOV")); TString nreg(r.get("NUMREG"));
TDate ddoc(_rel->lfile().get_date("DATADOC")); TString ndoc(r.get("NUMDOC"));
TDate dreg(_rel->lfile().get_date("DATAREG")); TString tmov(r.get("TIPOMOV"));
TString reg (_rel->lfile().get("REG")); TDate ddoc(r.get_date("DATADOC"));
TString protiva(_rel->lfile().get("PROTIVA")); TDate dreg(r.get_date("DATAREG"));
TString codcaus(_rel->lfile().get("CODCAUS")); TString reg (r.get("REG"));
TString codval (_rel->lfile().get("CODVAL")); TString desc(r.get("DESCR"));
TString cambio (_rel->lfile().get("CAMBIO")); TString protiva(r.get("PROTIVA"));
TString codcaus(r.get("CODCAUS"));
TString codval (r.get("CODVAL"));
TString cambio (r.get("CAMBIO"));
TString numpart = m.get(F_NUMRIF); TString numpart = m.get(F_NUMRIF);
TString anno = m.get(F_ANNORIF); const int anno = m.get_int(F_ANNORIF);
char sezione = _rel->cg(0).get_char("SEZIONE"); // Dare/Avere char sezione = _rel->cg(0).get_char("SEZIONE"); // Dare/Avere
char tipocf = _rel->cg(0).get_char("TIPOC"); // Cliente || Fornitore || Uncazzo char tipocf = _rel->cg(0).get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("GRUPPO");
_rel->cg(0).get_char("GRUPPO"); int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("CONTO");
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 :
_rel->cg(0).get_char("fCONTO");
long sottoconto = _rel->cg(0).get_long("SOTTOCONTO"); long sottoconto = _rel->cg(0).get_long("SOTTOCONTO");
int nriga = 1; int nriga = 1;
int numrig = 1; int numrig = 1;
partita.put("TIPOCF", tipocf); // partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo); // partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto); // partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto); // partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno); partita.put("ANNO", anno);
partita.put("NUMPART", numpart); partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga); partita.put("NRIGA", nriga);
bool fromscratch = FALSE, new_part = TRUE; bool fromscratch = FALSE, new_part = TRUE;
TPagamento& pag = pagamento();
if (partita.read() == NOERR) if (partita.read() == NOERR)
{ {
// se si e' specificato un codice pagamento diverso si rifa' da capo // se si e' specificato un codice pagamento diverso si rifa' da capo
if (_pag->code() != partita.get("CODPAG")) if (pag.code() != partita.get("CODPAG"))
fromscratch = TRUE; fromscratch = TRUE;
new_part = FALSE; new_part = FALSE;
} }
// se modificato riaggiusta partite e scadenze // riaggiusta partite e scadenze
if (_pag->dirty() || new_part) if (new_part)
{ {
if (new_part) partita.zero();
{ partita.put("TIPOCF", tipocf);
partita.zero(); partita.put("GRUPPO", gruppo);
partita.put("TIPOCF", tipocf); partita.put("CONTO", conto);
partita.put("GRUPPO", gruppo); partita.put("SOTTOCONTO", sottoconto);
partita.put("CONTO", conto); partita.put("ANNO", anno);
partita.put("SOTTOCONTO", sottoconto); partita.put("NUMPART", numpart);
partita.put("ANNO", anno); partita.put("NRIGA", nriga);
partita.put("NUMPART", numpart); }
partita.put("NRIGA", nriga);
}
// put data on partita // put data on partita
partita.put("TIPOMOV",tmov); partita.put("TIPOMOV",tmov);
partita.put("NREG", nreg); partita.put("NREG", nreg);
partita.put("DATAREG",dreg); partita.put("DATAREG",dreg);
partita.put("DATADOC",ddoc); partita.put("DATADOC",ddoc);
partita.put("REG", reg); partita.put("REG", reg);
partita.put("PROTIVA",protiva); partita.put("DESCR", desc);
partita.put("CODCAUS",codcaus); partita.put("PROTIVA",protiva);
partita.put("SEZ", sezione); partita.put("CODCAUS",codcaus);
partita.put("CODPAG", _pag->code()); partita.put("SEZ", sezione);
partita.put("CODVAL", codval); partita.put("CODPAG", pag.code());
partita.put("CAMBIO", cambio); partita.put("CODVAL", codval);
partita.put("IMPORTO",_pag->imponibile()); partita.put("CAMBIO", cambio);
partita.put("IMPOSTA",_pag->imposta()); partita.put("IMPORTO",pag.imponibile());
partita.put("SPESE", _pag->spese()); partita.put("IMPOSTA",pag.imposta());
partita.put("NUMRIG", numrig); partita.put("SPESE", pag.spese());
partita.put("NUMRIG", numrig);
if (new_part) partita.write(); if (new_part) partita.write();
else partita.rewrite(); else partita.rewrite();
bool new_scad = FALSE; bool new_scad = FALSE;
for (int i = 0; i < _pag->n_rate(); i++) for (int i = 0; i < pag.n_rate(); i++)
{ {
new_scad = FALSE; new_scad = FALSE;
scadenza.zero(); scadenza.zero();
scadenza.put("TIPOCF", tipocf); // scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo); // scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto); // scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto); // scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
if (scadenza.read() != NOERR) if (scadenza.read() != NOERR)
{ {
new_scad = TRUE; new_scad = TRUE;
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
scadenza.put("CONTO", conto);
scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1);
}
// set everything
scadenza.put("CODPAG", _pag->code());
scadenza.put("TIPOPAG", _pag->tipo_rata(i));
scadenza.put("ULTCLASS", _pag->ulc_rata(i));
scadenza.put("IMPORTOVAL",_pag->tpay_rata(i));
scadenza.put("DATASCAD", _pag->data_rata(i));
scadenza.put("PAGATA", _pag->ratapagata(i));
if (new_scad) scadenza.write();
else scadenza.rewrite();
}
// elimina eventuali altre scadenze oltre l'ultima registrata
for (; !new_scad ; i++)
{
scadenza.zero(); scadenza.zero();
scadenza.put("TIPOCF", tipocf); scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo); scadenza.put("GRUPPO", gruppo);
@ -481,10 +456,184 @@ void TPrimanota_application::write_scadenze(const TMask& m)
scadenza.put("ANNO", anno); scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart); scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1); scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR)
scadenza.remove();
else new_scad = TRUE;
} }
// set everything
scadenza.put("CODPAG", pag.code());
scadenza.put("TIPOPAG", pag.tipo_rata(i));
scadenza.put("ULTCLASS", pag.ulc_rata(i));
scadenza.put("IMPORTO", pag.tpay_rata(i));
scadenza.put("DATASCAD", pag.data_rata(i));
scadenza.put("PAGATA", pag.ratapagata(i));
if (new_scad) scadenza.write();
else scadenza.rewrite();
}
// elimina eventuali altre scadenze oltre l'ultima registrata
for (; !new_scad ; i++)
{
scadenza.zero();
// scadenza.put("TIPOCF", tipocf);
// scadenza.put("GRUPPO", gruppo);
// scadenza.put("CONTO", conto);
// scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
scadenza.put("NRATA", i+1);
if (scadenza.read() == NOERR)
scadenza.remove();
else new_scad = TRUE;
} }
} }
///////////////////////////////////////////////////////////
// Sheet partite
///////////////////////////////////////////////////////////
bool TPrimanota_application::edit_partite(const TBill& b)
{
begin_wait();
TString80 caption("Partite aperte del conto ");
caption << b.gruppo() << ' ' << b.conto() << ' ' << b.sottoconto();
TArray_sheet a(-1, -1, 0, 0, caption, "Anno|Numero@7|Descrizione@50|Importo@15R|Sezione");
TLocalisamfile partita(LF_PARTITE);
partita.setkey(2); // Chiave per conto
partita.zero();
if (b.tipo() != ' ') // Ignora gruppo e conto dei clifo
{
partita.put(PART_TIPOCF, b.tipo());
partita.put(PART_SOTTOCONTO, b.sottoconto());
}
else b.put(partita.curr()); // Scrive completamente i conti normali
TRectype recpar(partita.curr()); // Record campione
int ult, anno; // Anno ultima partita
TString16 last, num; // Ultimo numero partita e numero corrente
TString desc; // Descrizione prima partita del gruppo
TImporto saldo; // Saldo ultima parita
TToken_string r(80);
for (int err = partita.read(_isgteq); err == NOERR && partita.curr() == recpar; err = partita.next())
{
num = partita.get(PART_NUMPART);
anno = partita.get_int(PART_ANNO);
if (num == last && anno == ult) // Se la partita e' la stessa ...
{
const TImporto i(partita.get_char(PART_SEZ), partita.get_real(PART_IMPORTO));
saldo += i; // ... incrementa totale
}
else
{
if (!saldo.is_zero()) // Se il saldo non e' nullo allora e' aperta
{
r.cut(0);
r.add(ult); r.add(last); r.add(desc);
r.add(saldo.valore().string(".")); r.add(saldo.sezione());
a.add(r); // Aggiunge partita alla lista
}
ult = anno;
last = num;
desc = partita.get(PART_DESCR);
saldo.set(partita.get_char(PART_SEZ), partita.get_real(PART_IMPORTO));
}
}
if (!saldo.is_zero()) // Aggiunge ultima partita se aperta
{
r.cut(0);
r.add(ult); r.add(last); r.add(desc);
r.add(saldo.valore().string(".")); r.add(saldo.sezione());
a.add(r);
}
end_wait();
const KEY k = a.items() > 0 ? a.run() : K_ESC;
if (k != K_ENTER)
return FALSE;
anno = a.row().get_int(0);
num = a.row().get(1);
TMask m("cg2100s");
m.set(S_ANNO, anno);
m.set(S_NUM, num);
TSheet_field& s = (TSheet_field&)m.field(S_SCADENZE);
TString_array& sr = s.rows_array();
TLocalisamfile scadenza(LF_SCADENZE);
scadenza.zero(); scadenza.put(SCAD_ANNO, anno); scadenza.put(SCAD_NUMPART, num);
const TRectype recsca(scadenza.curr());
for (err = scadenza.read(_isgteq);
err == NOERR && scadenza.curr() == recsca;
err = scadenza.next())
{
r.cut(0);
r.add(scadenza.get(SCAD_NRATA));
r.add(scadenza.get(SCAD_DATASCAD));
r.add(scadenza.get(SCAD_IMPORTOVAL));
r.add(scadenza.get(SCAD_IMPORTO));
r.add("");
r.add("S");
sr.add(r);
}
partita.setkey(1);
partita.zero(); partita.put(PART_ANNO, anno); partita.put(PART_NUMPART, num);
recpar = partita.curr();
const TString16 curreg(curr_mask().get(F_NUMREG)); // Numero registrazione corrente
desc.cut(0);
for (err = partita.read(_isgteq); err == NOERR && partita.curr() == recpar; err = partita.next())
{
const int rata = partita.get_int(PART_NRATA); // Legge eventuale numero rata
if (desc.empty())
{
desc = partita.get(PART_DESCR); // Aggiorna descrizione scadenze
for (int i = 0; i < sr.items(); i++)
{
TToken_string& t = sr.row(i);
if (t.get(S_DESCR-101)[0] <= ' ')
t.add(desc, S_DESCR-101);
}
}
if (rata < 1 || partita.get(PART_REG).not_empty())
continue;
for (int i = sr.items()-1; i >= 0; i--) // Cerca scadenza corrispondente
if (sr.row(i).get_int(0) == rata) break;
if (i < 0)
error_box("Non esiste una scadenza per la rata %d", rata);
r.cut(0);
r.add(rata);
r.add(partita.get(PART_DATADOC));
r.add(partita.get(PART_IMPORTOVAL));
r.add(partita.get(PART_IMPORTO));
r.add(desc);
r.add("P");
i = sr.insert(r, i >= 0 ? i+1 : -1);
if (partita.get(PART_NREG) != curreg)
s.disable_cell(i, -1);
}
s.force_update();
m.run();
return TRUE;
}

View File

@ -1,52 +1,55 @@
PAGE "Rata pagamento" -1 -1 50 7 PAGE "Rata pagamento" -1 -1 50 8
DATE 101 DATE 101
BEGIN BEGIN
PROMPT 1 2 "Scadenza " PROMPT 1 1 "Scadenza "
END END
NUMBER 102 8 0 NUMBER 102 8 3
BEGIN BEGIN
PROMPT 1 3 "Percentuale " PROMPT 1 2 "Percentuale "
PICTURE ".3"
FLAGS "R"
END END
NUMBER 103 15 0 NUMBER 103 15
BEGIN BEGIN
PROMPT 1 4 "Importo " PROMPT 1 3 "Importo "
PICTURE "."
FLAGS "R"
END END
NUMBER 104 2 0 NUMBER 104 2 0
BEGIN BEGIN
PROMPT 1 5 "Tipo pagamento " PROMPT 1 4 "Tipo pagamento "
HELP "" SHEET "Codice|Tipo pagamento@32"
SHEET "Codice|Tipo pagamento@32" INPUT 104
INPUT 104 ITEM "1|Rimessa diretta o contanti"
OUTPUT 104 ITEM "2|Tratta"
OUTPUT 105 ITEM "3|Ricevuta Bancaria"
ITEM "1|Rimessa diretta o contanti" ITEM "4|Cessione"
ITEM "2|Tratta" ITEM "5|Paghero'"
ITEM "3|Ricevuta Bancaria" ITEM "6|Lettera di credito"
ITEM "4|Cessione" ITEM "7|Tratta accettata"
ITEM "5|Paghero'" ITEM "8|Altro pagamento"
ITEM "6|Lettera di credito" OUTPUT 104
ITEM "7|Tratta accettata" OUTPUT 105
ITEM "8|Altro pagamento"
END END
STRING 105 36 STRING 105 32
BEGIN BEGIN
PROMPT 22 6 "" PROMPT 1 5 "Descrizione "
FLAGS "D" FLAGS "D"
END END
BUTTON DLG_CANCEL 10 2 BUTTON DLG_CANCEL 10 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -1 ""
END END
BUTTON DLG_OK 10 2 BUTTON DLG_OK 10 2
BEGIN BEGIN
PROMPT -22 -1 "" PROMPT -22 -1 ""
END END
ENDPAGE ENDPAGE

View File

@ -81,7 +81,7 @@ bool TDeleteprovv_app::menu(MENU_TAG)
mov.put(MOV_NUMREG, m.get(F_FROMREG)); mov.put(MOV_NUMREG, m.get(F_FROMREG));
const TRecnotype first = cur.read(); const TRecnotype first = cur.read();
const TRecnotype total = last-first+1; const TRecnotype total = first >= 0L ? last-first+1 : 0L;
TString80 caption("Cancellazione di "); TString80 caption("Cancellazione di ");
add_plural(caption, total, "movimento"); add_plural(caption, total, "movimento");

View File

@ -162,9 +162,9 @@ bool TParametri_ditta::postprocess_config(TMask& mask, TConfig& config)
const long ditta = get_firm(); const long ditta = get_firm();
ditte.put("CODDITTA", ditta); ditte.put("CODDITTA", ditta);
ditte.read(); ditte.read();
if (ditte.get("DINIZIOATT").empty()) if (ditte.get("DINIZIOATT").empty())
return error_box("La gestione della liquidazione differita richiede " error_box("La gestione della liquidazione differita richiede "
"la data di inizio attivita' sull'anagrafica della ditta."); "la data di inizio attivita' sull'anagrafica della ditta.");
char freqiva = ditte.get_char("FREQVIVA"); char freqiva = ditte.get_char("FREQVIVA");
@ -175,8 +175,8 @@ bool TParametri_ditta::postprocess_config(TMask& mask, TConfig& config)
freqiva = lia.get_char("S7"); freqiva = lia.get_char("S7");
if (freqiva != 'M') if (freqiva != 'M')
return error_box("La gestione della liquidazione differita richiede " error_box("La gestione della liquidazione differita richiede "
"la frequenza dei versamenti IVA mensile."); "la frequenza dei versamenti IVA mensile.");
} }
return TRUE; return TRUE;

View File

@ -10,6 +10,7 @@
#include <relation.h> #include <relation.h>
#include <sheet.h> #include <sheet.h>
#include <utility.h> #include <utility.h>
#include <viswin.h>
#include "cg5500a.h" #include "cg5500a.h"
@ -161,7 +162,7 @@ void Visliq_app::build_nomiditte()
{ {
// check no archivi // check no archivi
fr = "??"; fr = "??";
bool good = prefhndl->exist(dt.get_long("CODDITTA")); bool good = prefix().exist(dt.get_long("CODDITTA"));
if (good) if (good)
{ {

View File

@ -92,15 +92,14 @@ void TRipristino_liq::build_nomiditte()
{ {
// check no archivi // check no archivi
fr = "??"; fr = "??";
bool good = prefhndl->exist(dt.get_long("CODDITTA")); bool good = prefix().exist(dt.get_long("CODDITTA"));
if (good) if (good)
{ {
// check no parametri liquidazione // check no parametri liquidazione
lia.zero(); lia.zero();
TString diocan = format("%05ld%4s", dt.get_long("CODDITTA"), const TString16 cod(format("%05ld%4s", dt.get_long("CODDITTA"), (const char*)_year));
(const char*)_year); lia.put("CODTAB", cod);
lia.put("CODTAB", diocan);
if (lia.read() != NOERR) good = FALSE; if (lia.read() != NOERR) good = FALSE;
else fr = lia.get("S7"); else fr = lia.get("S7");
} }

View File

@ -81,6 +81,43 @@ const TBill& TBill::add_to(TToken_string& ts, int from, int mode)
} }
const char* TBill::file2type(int num) const
{
const char* t = "TIPOC";
switch (num)
{
case LF_PARTITE:
t = "TIPOCF"; break;
default:
break;
}
return t;
}
void TBill::put(TRectype& r) const
{
r.put(file2type(r.num()), tipo());
r.put("GRUPPO", gruppo());
r.put("CONTO", conto());
r.put("SOTTOCONTO", sottoconto());
}
bool TBill::get(const TRectype& r)
{
set(r.get_int("GRUPPO"),
r.get_int("CONTO"),
r.get_long("SOTTOCONTO"),
r.get_char(file2type(r.num())));
if (r.num() == LF_RMOVIVA)
tipo_cr(r.get_int("TIPOCR"));
return ok();
}
// Certified 100% // Certified 100%
bool TBill::ok() const bool TBill::ok() const
{ {

View File

@ -1,12 +1,8 @@
#ifndef __CONTO_H #ifndef __CONTO_H
#define __CONTO_H #define __CONTO_H
#ifndef __STRINGS_H #ifndef __ISAM_H
#include <strings.h> #include <isam.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif #endif
class TBill : public TSortable class TBill : public TSortable
@ -24,11 +20,13 @@ protected:
virtual const char* class_name() const { return "Conto"; } virtual const char* class_name() const { return "Conto"; }
const TBill& copy(const TBill& b); const TBill& copy(const TBill& b);
const char* file2type(int logicnum) const;
public: public:
TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1) TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1)
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d), _sezione(' ') : _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d),
{ set(g,c,s,t,d,r);} _sezione(' '), _sospeso(FALSE)
{ set(g,c,s,t,d,r);}
TBill(TToken_string& tgcsd, int from, int mode = 0); TBill(TToken_string& tgcsd, int from, int mode = 0);
TBill(const TBill& b) { copy(b); } TBill(const TBill& b) { copy(b); }
@ -57,6 +55,9 @@ public:
bool sospeso() const { return _sospeso; } // _sospeso e' letto nella read() bool sospeso() const { return _sospeso; } // _sospeso e' letto nella read()
char sezione() const { return _sezione; } char sezione() const { return _sezione; }
void put(TRectype& r) const;
bool get(const TRectype& r);
const char* string(int mode = 0); const char* string(int mode = 0);
}; };

View File

@ -210,9 +210,10 @@ TToken_string& TPagamento::set_rata (int index, real perc, int day, int type,
const char* ulc, const char* imp, const char* ulc, const char* imp,
const char* data) const char* data)
{ {
bool nwr = FALSE;
TToken_string* tt = (TToken_string*)_rate.objptr(index); TToken_string* tt = (TToken_string*)_rate.objptr(index);
if (nwr = (tt == NULL)) tt = new TToken_string(16); const bool nwr = (tt == NULL);
if (nwr) tt = new TToken_string(16);
tt->add(day,0); // scadenza tt->add(day,0); // scadenza
tt->add(perc.string(),1); // percentuale tt->add(perc.string(),1); // percentuale
tt->add(type,2); // tipo tt->add(type,2); // tipo
@ -221,18 +222,18 @@ TToken_string& TPagamento::set_rata (int index, real perc, int day, int type,
tt->add(ulc == NULL ? "" : ulc,5); tt->add(ulc == NULL ? "" : ulc,5);
if (!nwr) if (!nwr)
{ {
if (index > _rate.items()) if (index > _rate.items())
{ {
error_box("Rate non contigue"); error_box("Rate non contigue");
delete tt; delete tt;
} }
} }
else else
{ {
_rate.add(tt,index); _rate.add(tt,index);
_dirty = TRUE; _dirty = TRUE;
} }
return *tt; return *tt;
} }
@ -248,14 +249,15 @@ void TPagamento::set_imprata(int i, real r)
tt.add(r.string(), 4); tt.add(r.string(), 4);
} }
TToken_string& TPagamento::set_rata(int index, real howmuch, TToken_string& TPagamento::set_rata(int index, const real& howmuch,
TDate& date, int type,const char* ulc, bool pagato) const TDate& date, int type,const char* ulc, bool pagato)
{ {
// calcola percentuali e scadenze a partire dagli importi // calcola percentuali e scadenze a partire dagli importi
bool nwr = FALSE;
TToken_string* tt = (TToken_string*)_rate.objptr(index); TToken_string* tt = (TToken_string*)_rate.objptr(index);
if (nwr = (tt == NULL))
tt = new TToken_string(16); const bool nwr = (tt == NULL); // nuova rata
if (nwr) tt = new TToken_string(16);
TDate oldd = index > 0 ? data_rata(index -1) : _inizio; TDate oldd = index > 0 ? data_rata(index -1) : _inizio;
int day = date - oldd; int day = date - oldd;
@ -273,18 +275,18 @@ TToken_string& TPagamento::set_rata(int index, real howmuch,
if (pagato) tt->add("X",6); if (pagato) tt->add("X",6);
if (!nwr) if (!nwr)
{ {
if (index > _rate.items()) if (index > _rate.items())
{ {
error_box("Rate non contigue"); error_box("Rate non contigue");
delete tt; delete tt;
} }
} }
else else
{ {
_rate.add(tt,index); _rate.add(tt, index);
_dirty = TRUE; _dirty = TRUE;
} }
return *tt; return *tt;
} }

View File

@ -103,7 +103,7 @@ public:
const char* ulc = NULL, const char* imp = NULL, const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL); const char* data = NULL);
// questa calcola percentuali e scadenze a partire dagli importi // questa calcola percentuali e scadenze a partire dagli importi
TToken_string& set_rata (int index, real howmuch, TDate& date, int type, TToken_string& set_rata (int index, const real& howmuch, const TDate& date, int type,
const char* ulc, bool pagato); const char* ulc, bool pagato);
void remove_rata(int r); void remove_rata(int r);