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_CODSTAT 130
#define F_CODPAG 131
#define F_DESPAG 231
#define F_RAGSOC1 132
#define F_CODABI 133
#define F_CODBAN 134
#define F_DESBAN 140
#define F_CODVAL 136
#define F_DESVAL 236
#define F_FIDO 139
#define F_LOCALITACF 144
#define F_CODAG 145
@ -59,6 +61,7 @@
#define F_PTEL3 155
#define F_TEL3 156
#define F_CODLIN 157
#define F_DESLIN 257
#define F_TIPOCFVEN 158
#define F_CODCFVEN 159

View File

@ -114,8 +114,7 @@ TMask* TPrimanota_application::load_mask(int n)
TMask& cgm = cg.sheet_mask();
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_SPESE, speserimb_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_DIFFCAMB, diffcamb_handler);
}
cgm.set_handler(101, dareavere_handler);
cgm.set_handler(102, dareavere_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 (_pag) delete _pag;
if (_pag_rows != NULL) delete _pag_rows;
delete _giornale;
delete _causale;
@ -220,14 +219,15 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (cod != NULL)
ok = causale().read(cod, year);
bool nob = FALSE, dob = FALSE, sal = FALSE;
bool nob = FALSE, dob = FALSE;
TipoIVA iva = nessuna_iva;
_is_saldaconto = FALSE;
if (ok)
{
_is_saldaconto = sal = gestione_saldaconto() && causale().saldaconto();
dob = sal | causale().data_doc();
nob = sal | causale().num_doc();
_is_saldaconto = gestione_saldaconto() && causale().saldaconto();
dob = _is_saldaconto | causale().data_doc();
nob = _is_saldaconto | causale().num_doc();
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_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
const bool av = causale().reg().agenzia_viaggi();
m->show(F_DATA74TER, av);
if (!av) m->reset(F_DATA74TER);
m->efield(F_CODPAG).check_type(_is_saldaconto ? CHECK_REQUIRED : CHECK_NORMAL);// Cod. pag. obbligatorio
m->show(F_ANNORIF, sal); // Mostra/nasconde anno e riferimento partita
m->show(F_NUMRIF, sal);
m->show(F_ANNORIF, _is_saldaconto); // Mostra/nasconde anno e riferimento partita
m->show(F_NUMRIF, _is_saldaconto);
m->enable(F_ANNORIF, ins); // Dis/abilita anno e riferimento partita
m->enable(F_NUMRIF, ins);
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)
{
@ -288,9 +296,8 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (err)
{
error_box("Il conto %d %d %ld della causale e' %s",
tc.gruppo(), tc.conto(), tc.sottoconto(),
err == 1 ? "sconosciuto" : "sospeso");
error_box("Il conto della riga %d della causale e' %s",
i, err == 1 ? "sconosciuto" : "sospeso");
continue;
}
@ -302,18 +309,23 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (iva == nessuna_iva)
{
char tipr = ' ';
// non si cagano gli importi totali
if (nriga < 8) continue;
switch(nriga)
char tipr = ' ';
if (_is_saldaconto) switch(nriga)
{
case 8: tipr = 'P'; break;
case 9: tipr = 'A'; break;
case 10: tipr = 'G'; break;
case 11: tipr = 'R'; break;
}
case 8:
tipr = 'P'; break;
case 9:
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);
if (sezione > ' ')
cgs().disable_cell(pos, sezione == 'A' ? 0 : 1);
@ -335,6 +347,8 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
return ok;
}
// Certified 100%
void TPrimanota_application::print()
{
TExternal_app stampa("cg3 -0");
@ -433,7 +447,11 @@ void TPrimanota_application::init_mask(TMask& m)
const bool valintra = causale().valintra();
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;
if (_iva == iva_acquisti)
@ -539,27 +557,6 @@ void TPrimanota_application::init_modify_mode(TMask& m)
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)
// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale
bool TPrimanota_application::test_swap(bool ritsoc)
@ -618,7 +615,7 @@ int TPrimanota_application::read(TMask& m)
TImporto import(sezione, im);
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
_saldi.aggiorna(conto, im, sezione, FALSE);
@ -676,7 +673,7 @@ int TPrimanota_application::read(TMask& m)
}
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
ivas().row(i) = riga;
@ -732,7 +729,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
r.put("SEZIONE", n.sezione()); // Sezione
r.put("IMPORTO", n.valore()); // Importo
put_conto(r, conto); // Conto
conto.put(r); // Conto
row.get(); // Codice descrizione
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 int rimp = bill2pos(c, 'I')+1;
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)
{
causale().reg().reread(); // Aggiorna protocollo IVA
if (!gestione_saldaconto() && !m.get_bool(F_SOLAIVA))
{
const TString16 causimm(causale().causale_inc_imm());
if (causimm.not_empty())
genera_incasso(causimm);
}
if (_is_saldaconto)
write_scadenze(m);
else
if (!m.get_bool(F_SOLAIVA))
{
const TString16 causimm(causale().causale_inc_imm());
if (causimm.not_empty())
genera_incasso(causimm);
}
}
if (gestione_saldaconto() && causale().saldaconto())
write_scadenze(m);
}
return err;
}
@ -883,7 +880,7 @@ int TPrimanota_application::rewrite(const TMask& m)
_saldi.registra();
check_saldi();
}
if (gestione_saldaconto() && causale().saldaconto())
if (_is_saldaconto && iva() != nessuna_iva)
write_scadenze(m);
return err;
}
@ -916,7 +913,7 @@ HIDDEN bool incasso_handler(TMask_field& f, KEY k)
const TImporto imp(m.get(sid)[0], val);
tot += imp;
}
if (tot.valore() != ZERO)
if (!tot.is_zero())
return f.error_box("Il movimento e' sbilaciato di %s", tot.valore().string("."));
}
return TRUE;
@ -926,7 +923,7 @@ HIDDEN bool incasso_handler(TMask_field& f, KEY k)
void TPrimanota_application::genera_incasso(const char* causimm)
{
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_DATACOMP, datacomp_handler);
@ -1053,7 +1050,7 @@ void TPrimanota_application::genera_incasso(const char* causimm)
for (int r = 0; r < i; 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 char sezione = rec.get_char("SEZIONE");
_saldi.aggiorna(c, im, sezione, TRUE);

View File

@ -127,5 +127,17 @@
#define K_ANNOES 514
#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

View File

@ -19,7 +19,7 @@ BEGIN
FLAGS "FRD"
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
OUTPUT K_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
@ -35,8 +35,7 @@ NUMBER F_NUMREG 7
BEGIN
PROMPT 56 3 "Operazione n. "
FIELD NUMREG
FLAGS "RD"
KEY 1
FLAGS "DGR"
MESSAGE COPY,K_NUMREG
END
@ -46,6 +45,7 @@ BEGIN
HELP "Data in cui viene effettuata l'operazione"
FIELD DATAREG
CHECKTYPE REQUIRED
MESSAGE COPY,K_DATAREG
END
@ -55,6 +55,7 @@ BEGIN
HELP "Data di competenza dell'operazione"
FIELD DATACOMP
CHECKTYPE REQUIRED
MESSAGE COPY,K_DATACOMP
END
NUMBER F_ANNOES 4
@ -62,7 +63,7 @@ BEGIN
PROMPT 56 4 "Esercizio "
FIELD ANNOES
MESSAGE COPY,K_ANNOES
FLAGS "DZ"
FLAGS "DGZ"
END
STRING F_CODCAUS 3
@ -203,66 +204,72 @@ END
NUMBER S_TOTDOC 15 0
BEGIN
PROMPT 1 10 "Totale documento "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 1 10 "Totale documento "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
GROUPBOX DLG_NULL 78 7
GROUPBOX DLG_NULL 78 9
BEGIN
PROMPT 0 11 "Voci di spesa"
PROMPT 0 9 "Voci di spesa per saldaconto"
END
NUMBER S_SPESE 15 0
BEGIN
PROMPT 1 12 "Spese e rimborsi "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 1 12 "Spese e rimborsi "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
NUMBER S_ALSPESE 15 0
BEGIN
PROMPT 39 12 "Altre spese "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 39 12 "Altre spese "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
NUMBER S_ABBATT 15 0
BEGIN
PROMPT 1 14 "Abbuoni attivi "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 1 14 "Abbuoni attivi "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
NUMBER S_ABBPASS 15 0
BEGIN
PROMPT 39 14 "Abbuoni passivi "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 39 14 "Abbuoni passivi "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
NUMBER S_RITPROF 15 0
BEGIN
PROMPT 1 16 "Ritenuta prof. "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 1 16 "Ritenuta prof. "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
NUMBER S_DIFFCAMB 15 0
BEGIN
PROMPT 39 16 "Diff. cambio "
HELP ""
FLAGS "R"
PICTURE "."
PROMPT 39 16 "Diff. cambio "
HELP ""
FLAGS "R"
PICTURE "."
GROUP 5
END
ENDPAGE
@ -289,15 +296,12 @@ END
NUMBER K_NUMREG 7
BEGIN
PROMPT 56 3 "Operazione n. "
FIELD NUMREG
FLAGS "RD"
KEY 1
END
DATE K_DATAREG
BEGIN
PROMPT 1 3 "Data operazione "
HELP "Data in cui viene effettuata l'operazione"
FLAGS "D"
END
@ -305,35 +309,30 @@ END
DATE K_DATACOMP
BEGIN
PROMPT 1 4 "Data di competenza "
HELP "Data di competenza dell'operazione"
FLAGS "D"
END
NUMBER K_ANNOES 4
BEGIN
PROMPT 56 4 "Esercizio "
FIELD ANNOES
FLAGS "D"
FLAGS "DZ"
END
STRING K_CODCAUS 3
BEGIN
PROMPT 1 5 "Causale "
HELP "Codice della causale generante l'operazione"
FLAGS "D"
END
STRING K_DESCRCAUS 50
BEGIN
PROMPT 25 5 ""
HELP "Descrizione della causale generante l'operazione"
FLAGS "D"
END
LIST K_PROVVISORIO 1 25
BEGIN
PROMPT 1 6 "Movimento provvisorio "
HELP "Indicare se si tratta di movimento provvisorio"
ITEM " |No (movimento normale)"
ITEM "P|Si (cancellabile)"
ITEM "N|Si (non cancellabile)"
@ -350,14 +349,12 @@ END
DATE K_DATADOC
BEGIN
PROMPT 1 7 "Data del documento "
HELP "Data del documento generante il movimento"
FLAGS "D"
END
STRING K_NUMDOC 7
BEGIN
PROMPT 56 7 "Documento n. "
HELP "Numero del documento generante il movimento"
FLAGS "D"
END
@ -402,4 +399,4 @@ ENDMASK
#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)
{
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;
@ -390,7 +393,7 @@ return n;
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.
static char* sort_order = "TFSI DN";
const char* const sort_order = "TFSI DNGAPRLC";
const TToken_string* r1 = (const TToken_string*)*o1;
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;
}
// Gestore del sottoconto dello sheet IVA
bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY 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 ok = TRUE;
TMask& m = f.mask();
if (key == K_TAB && f.focusdirty())
{
app().add_cgs_tot(f.mask());
f.mask().field(F_CODIVA).on_hit();
if (app().is_saldaconto() && !(f.mask().get(F_CODPAG).blank()))
app().set_scadenze(f.mask());
app().add_cgs_tot(m);
m.field(F_CODIVA).on_hit();
if (app().is_saldaconto() && m.get(F_CODPAG).not_empty())
app().set_scadenze(m);
}
if (key == K_ENTER && f.get().empty())

View File

@ -62,7 +62,7 @@ class TPrimanota_application : public TRelation_application
int _mode; // Modo maschera corrente
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 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);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual void print();
protected: // TApplication
virtual void on_firm_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 TMask* get_mask(int mode);
virtual TRelation* get_relation() const { return _rel; }
@ -132,15 +134,13 @@ protected:
virtual int rewrite(const TMask& m);
virtual bool remove();
protected:
void check_saldi();
void genera_incasso(const char* causimm);
TMask* load_mask(int n);
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);
TipoIVA iva() const { return _iva; }
@ -156,7 +156,7 @@ protected:
TSheet_field& cgs() const;
TSheet_field& ivas() 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 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);
void disable_cgs_cells(int n, char tipo);
void add_cgs_tot(TMask& m);
// void add_cgs_tot_noiva(TMask& m);
void add_cgs_rit(bool fisc);
void add_cgs_row_noniva(TipoConto t);
void generazione_righe_cg(int r);
@ -202,12 +202,13 @@ protected:
void reset_cgs_row(int n) { reset_sheet_row(cgs(), 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 reset_pagamento();
void set_scadenze(TMask& m);
bool read_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(); }

View File

@ -3,18 +3,22 @@
// fv 24/8/94
// --------------------------------------------------------------------------
#include <sheet.h>
#include "cg2102.h"
#include "cg2100.h"
#include "cg21sld.h"
#include "pagament.h"
#include <partite.h>
#include <scadenze.h>
bool TPrimanota_application::pag_notify(int r, KEY k)
{
TPagamento* pag = app().pagamento();
TSheet_field* ps = &(app().pags());
TMask* msk = &(app().curr_mask());
TArray* rws = app().pag_rows();
TPagamento& pag = app().pagamento();
TSheet_field& ps = app().pags();
TMask* msk = &(app().curr_mask());
TString_array& rws = app().pag_rows();
int rdiff = atoi(msk->get(FS_RDIFFER));
@ -35,8 +39,8 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
case K_SPACE:
break;
case K_ENTER:
ns = ps->row(r);
ts = (TToken_string&)(*rws)[r];
ns = ps.row(r);
ts = rws.row(r);
news = ns.get(0);
newp = ns.get(1);
@ -44,15 +48,15 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
newt = ns.get(3);
// 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;
}
if (strcmp(ts.get(1),newp) != 0) // modificata percentuale
if (newp != ts.get(1)) // modificata percentuale
{
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
if ((recalc && !m_perc) || (!recalc))
@ -60,7 +64,7 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
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;
}
@ -83,67 +87,67 @@ bool TPrimanota_application::pag_notify(int r, KEY k)
if (mod && recalc)
{
// ricalcola sheet come sai fare tu
ahiahi = pag->recalc_rate(r, m_perc,
((m_perc || m_imp) ?
(m_perc ? (const char*)newp : (const char*)newi) :
NULL),
(m_scad ? (const char*)news : NULL),
(m_tipo ? (const char*)newt : NULL),
rdiff, mcomm, need_recalc);
ahiahi = pag.recalc_rate(r, m_perc,
((m_perc || m_imp) ?
(m_perc ? (const char*)newp : (const char*)newi) :
NULL),
(m_scad ? (const char*)news : NULL),
(m_tipo ? (const char*)newt : NULL),
rdiff, mcomm, need_recalc);
// 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)
{
ahiahi = P_OK;
// put data as they are
TToken_string& trw = pag->rata(r);
TToken_string& trw = pag.rata(r);
TToken_string srw = trw;
if (m_scad) trw.add(news,3);
if (m_perc) trw.add(newp,1);
if (m_imp) trw.add(newi,4);
if (m_tipo) trw.add(newt,2);
// validate the payment
if ((ahiahi = pag->validate()) != P_OK)
pag->rata(r) = srw;
if ((ahiahi = pag.validate()) != P_OK)
pag.rata(r) = srw;
}
if (ahiahi) // any error?
// rimetti le righe com'erano prima
if (ahiahi) // any error? Rimetti le righe com'erano prima
{
beep();
// se gli errori sono voluti, spiegali
if (!recalc)
{
TString s(256);
pag->strerr(ahiahi,s);
TString256 s;
pag.strerr(ahiahi,s);
warning_box(s);
}
ps->row(r) = (TToken_string&)(*rws)[r];
ps->force_update(r);
ps.row(r) = rws.row(r);
ps.force_update(r);
}
else if (recalc && mod && need_recalc)
{
// ridefinisci lo sheet sulla base delle nuove rate
pag->set_sheet(*ps);
ps->force_update(-1);
rws->destroy();
(*rws) = ps->rows_array();
}
else if (recalc && mod && need_recalc)
{
// ridefinisci lo sheet sulla base delle nuove rate
pag.set_sheet(ps);
ps.force_update();
rws = ps.rows_array();
}
}
return doit;
}
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));
app().set_pagamento(f.get(),dt);
app().set_scadenze(f.mask());
const TString16 dt(m.get(F_DATAREG));
app().set_pagamento(f.get(), dt);
app().set_scadenze(m);
}
return TRUE;
}
@ -159,49 +163,49 @@ void TPrimanota_application::set_scadenze(TMask& m)
real imponibile(0.0);
real imposta(0.0);
real spese(0.0);
TString dt(m.get(F_DATAREG));
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
if (_pag->is_new())
TPagamento& pag = pagamento();
if (pag.is_new())
{
m.disable_page(2);
return;
}
else m.enable_page(2);
m.field(FS_RDIFFER).set(_pag->rate_differenziate() ? "1" : "2");
m.field(FS_NAMEPAG).set(_pag->name());
m.field(FS_TIPOPR).set(_pag->desc_tpr());
m.field(FS_MCOMM).set(_pag->mese_commerciale() ? "X" : "");
m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
m.set(FS_NAMEPAG, pag.name());
m.set(FS_TIPOPR, pag.desc_tpr());
m.set(FS_MCOMM, pag.mese_commerciale() ? "X" : "");
TSheet_field& iva_sh = ivas();
for (int i = 0; i < iva_sh.items(); i++)
{
TToken_string& tt = iva_sh.row(i);
real mpo(tt.get(0));
real imp(tt.get(3));
const real mpo(tt.get(0));
imponibile += mpo;
const real imp(tt.get(3));
imposta += imp;
}
m.field(FS_IMPONIBILE).set(imponibile.string());
m.field(FS_IMPOSTA).set(imposta.string());
m.field(FS_SPESE).set(spese.string());
m.field(FS_RECALC).set("X");
m.set(FS_IMPONIBILE, imponibile.string());
m.set(FS_IMPOSTA, imposta.string());
m.set(FS_SPESE, spese.string());
m.set(FS_RECALC, "X");
_pag->set_total(imponibile, imposta, spese);
_pag->set_rate_auto();
pag.set_total(imponibile, imposta, spese);
pag.set_rate_auto();
bool new_part = TRUE;
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
// prepara lo sheet
_pag->set_sheet(ps);
if (_pag_rows != NULL) delete _pag_rows;
_pag_rows = new TArray(ps.rows_array());
pag.set_sheet(ps);
_pag_rows = ps.rows_array();
// 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,1);
@ -215,7 +219,6 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
real imponibile(0.0);
real imposta(0.0);
real spese(0.0);
TString dt(m.get(F_DATAREG));
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_SPESE).set(spese.string());
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 scadenza(LF_SCADENZE);
@ -265,26 +269,26 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
int nriga = 1;
int numrig = 1;
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
// partita.put("TIPOCF", tipocf);
// partita.put("GRUPPO", gruppo);
// partita.put("CONTO", conto);
// partita.put("SOTTOCONTO", sottoconto);
partita.put(PART_ANNO, anno);
partita.put(PART_NUMPART, numpart);
partita.put(PART_NRIGA, nriga);
bool fromscratch = FALSE;
if (partita.read() == NOERR)
{
// 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;
// se invece la maschera contiene importi diversi da quelli
// registrati si passa la palla al culano
else if (imponibile != partita.get_real("IMPORTO") ||
imposta != partita.get_real("IMPOSTA") ||
spese != partita.get_real("SPESE"))
else if (imponibile != partita.get_real(PART_IMPORTO) ||
imposta != partita.get_real(PART_IMPOSTA) ||
spese != partita.get_real(PART_SPESE))
{
fromscratch = !yesno_box("Gli importi totali delle scadenze sono stati modificati rispetto"
" 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)
_pag->set_rate_auto();
pag.set_rate_auto();
else
{
_pag->zap_rate();
pag.zap_rate();
for (int i = 0; ; i++)
{
// cerca rata
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);
// scadenza.put("TIPOCF", tipocf);
// scadenza.put("GRUPPO", gruppo);
// scadenza.put("CONTO", conto);
// scadenza.put("SOTTOCONTO", sottoconto);
scadenza.put(PART_ANNO, anno);
scadenza.put(PART_NUMPART, numpart);
scadenza.put(PART_NRATA, i+1);
if (scadenza.read() == NOERR)
{
real importo = scadenza.get("IMPORTOVAL");
TDate scad = scadenza.get("DATASCAD");
int tipop = scadenza.get_int("TIPOPAG");
bool paid = scadenza.get_bool("PAGATA");
TString ulc(scadenza.get("ULTCLASS"));
_pag->set_rata(i, importo, scad, tipop, ulc, paid);
const real importo = scadenza.get(SCAD_IMPORTO);
const TDate scad = scadenza.get(SCAD_DATASCAD);
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
const bool paid = scadenza.get_bool(SCAD_PAGATA);
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
pag.set_rata(i, importo, scad, tipop, ulc, paid);
}
else break;
} // for
@ -327,152 +330,124 @@ bool TPrimanota_application::read_scadenze(const TMask& m)
else
return FALSE;
_pag->set_sheet(ps);
if (_pag_rows != NULL) delete _pag_rows;
_pag_rows = new TArray(ps.rows_array());
pag.set_sheet(ps);
_pag_rows = ps.rows_array();
// se la prima rata e' fissa non si tocca
if (_pag->tipo_prima_rata() > 0)
{
ps.disable_cell(0,0);
ps.disable_cell(0,1);
ps.disable_cell(0,2);
ps.disable_cell(0,3);
}
if (pag.tipo_prima_rata() > 0)
ps.disable_cell(0,-1);
return TRUE;
}
void TPrimanota_application::write_scadenze(const TMask& m)
{
real imponibile(0.0);
real imposta(0.0);
real spese(0.0);
real imponibile(0.0);
real imposta(0.0);
real spese(0.0);
// 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 scadenza(LF_SCADENZE);
TString nreg(_rel->lfile().get("NUMREG"));
TString ndoc(_rel->lfile().get("NUMDOC"));
TString tmov(_rel->lfile().get("TIPOMOV"));
TDate ddoc(_rel->lfile().get_date("DATADOC"));
TDate dreg(_rel->lfile().get_date("DATAREG"));
TString reg (_rel->lfile().get("REG"));
TString protiva(_rel->lfile().get("PROTIVA"));
TString codcaus(_rel->lfile().get("CODCAUS"));
TString codval (_rel->lfile().get("CODVAL"));
TString cambio (_rel->lfile().get("CAMBIO"));
TRectype& r = _rel->lfile().curr();
TString nreg(r.get("NUMREG"));
TString ndoc(r.get("NUMDOC"));
TString tmov(r.get("TIPOMOV"));
TDate ddoc(r.get_date("DATADOC"));
TDate dreg(r.get_date("DATAREG"));
TString reg (r.get("REG"));
TString desc(r.get("DESCR"));
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 anno = m.get(F_ANNORIF);
const int anno = m.get_int(F_ANNORIF);
char sezione = _rel->cg(0).get_char("SEZIONE"); // Dare/Avere
char tipocf = _rel->cg(0).get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 :
_rel->cg(0).get_char("GRUPPO");
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 :
_rel->cg(0).get_char("fCONTO");
int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("GRUPPO");
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("CONTO");
long sottoconto = _rel->cg(0).get_long("SOTTOCONTO");
int nriga = 1;
int numrig = 1;
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
// partita.put("TIPOCF", tipocf);
// partita.put("GRUPPO", gruppo);
// partita.put("CONTO", conto);
// partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
bool fromscratch = FALSE, new_part = TRUE;
TPagamento& pag = pagamento();
if (partita.read() == NOERR)
{
// 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;
new_part = FALSE;
}
// se modificato riaggiusta partite e scadenze
if (_pag->dirty() || new_part)
// riaggiusta partite e scadenze
if (new_part)
{
if (new_part)
{
partita.zero();
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
}
partita.zero();
partita.put("TIPOCF", tipocf);
partita.put("GRUPPO", gruppo);
partita.put("CONTO", conto);
partita.put("SOTTOCONTO", sottoconto);
partita.put("ANNO", anno);
partita.put("NUMPART", numpart);
partita.put("NRIGA", nriga);
}
// put data on partita
partita.put("TIPOMOV",tmov);
partita.put("NREG", nreg);
partita.put("DATAREG",dreg);
partita.put("DATADOC",ddoc);
partita.put("REG", reg);
partita.put("PROTIVA",protiva);
partita.put("CODCAUS",codcaus);
partita.put("SEZ", sezione);
partita.put("CODPAG", _pag->code());
partita.put("CODVAL", codval);
partita.put("CAMBIO", cambio);
partita.put("IMPORTO",_pag->imponibile());
partita.put("IMPOSTA",_pag->imposta());
partita.put("SPESE", _pag->spese());
partita.put("NUMRIG", numrig);
// put data on partita
partita.put("TIPOMOV",tmov);
partita.put("NREG", nreg);
partita.put("DATAREG",dreg);
partita.put("DATADOC",ddoc);
partita.put("REG", reg);
partita.put("DESCR", desc);
partita.put("PROTIVA",protiva);
partita.put("CODCAUS",codcaus);
partita.put("SEZ", sezione);
partita.put("CODPAG", pag.code());
partita.put("CODVAL", codval);
partita.put("CAMBIO", cambio);
partita.put("IMPORTO",pag.imponibile());
partita.put("IMPOSTA",pag.imposta());
partita.put("SPESE", pag.spese());
partita.put("NUMRIG", numrig);
if (new_part) partita.write();
else partita.rewrite();
if (new_part) partita.write();
else partita.rewrite();
bool new_scad = FALSE;
bool new_scad = FALSE;
for (int i = 0; i < _pag->n_rate(); i++)
{
new_scad = FALSE;
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)
{
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++)
{
for (int i = 0; i < pag.n_rate(); i++)
{
new_scad = FALSE;
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)
{
new_scad = TRUE;
scadenza.zero();
scadenza.put("TIPOCF", tipocf);
scadenza.put("GRUPPO", gruppo);
@ -481,10 +456,184 @@ void TPrimanota_application::write_scadenze(const TMask& m)
scadenza.put("ANNO", anno);
scadenza.put("NUMPART", numpart);
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
BEGIN
PROMPT 1 2 "Scadenza "
PROMPT 1 1 "Scadenza "
END
NUMBER 102 8 0
NUMBER 102 8 3
BEGIN
PROMPT 1 3 "Percentuale "
PROMPT 1 2 "Percentuale "
PICTURE ".3"
FLAGS "R"
END
NUMBER 103 15 0
NUMBER 103 15
BEGIN
PROMPT 1 4 "Importo "
PROMPT 1 3 "Importo "
PICTURE "."
FLAGS "R"
END
NUMBER 104 2 0
BEGIN
PROMPT 1 5 "Tipo pagamento "
HELP ""
SHEET "Codice|Tipo pagamento@32"
INPUT 104
OUTPUT 104
OUTPUT 105
ITEM "1|Rimessa diretta o contanti"
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
ITEM "4|Cessione"
ITEM "5|Paghero'"
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Altro pagamento"
PROMPT 1 4 "Tipo pagamento "
SHEET "Codice|Tipo pagamento@32"
INPUT 104
ITEM "1|Rimessa diretta o contanti"
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
ITEM "4|Cessione"
ITEM "5|Paghero'"
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Altro pagamento"
OUTPUT 104
OUTPUT 105
END
STRING 105 36
STRING 105 32
BEGIN
PROMPT 22 6 ""
FLAGS "D"
PROMPT 1 5 "Descrizione "
FLAGS "D"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -12 -1 ""
PROMPT -12 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -22 -1 ""
PROMPT -22 -1 ""
END
ENDPAGE

View File

@ -81,7 +81,7 @@ bool TDeleteprovv_app::menu(MENU_TAG)
mov.put(MOV_NUMREG, m.get(F_FROMREG));
const TRecnotype first = cur.read();
const TRecnotype total = last-first+1;
const TRecnotype total = first >= 0L ? last-first+1 : 0L;
TString80 caption("Cancellazione di ");
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();
ditte.put("CODDITTA", ditta);
ditte.read();
if (ditte.get("DINIZIOATT").empty())
return error_box("La gestione della liquidazione differita richiede "
"la data di inizio attivita' sull'anagrafica della ditta.");
if (ditte.get("DINIZIOATT").empty())
error_box("La gestione della liquidazione differita richiede "
"la data di inizio attivita' sull'anagrafica della ditta.");
char freqiva = ditte.get_char("FREQVIVA");
@ -175,8 +175,8 @@ bool TParametri_ditta::postprocess_config(TMask& mask, TConfig& config)
freqiva = lia.get_char("S7");
if (freqiva != 'M')
return error_box("La gestione della liquidazione differita richiede "
"la frequenza dei versamenti IVA mensile.");
error_box("La gestione della liquidazione differita richiede "
"la frequenza dei versamenti IVA mensile.");
}
return TRUE;

View File

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

View File

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

View File

@ -1,12 +1,8 @@
#ifndef __CONTO_H
#define __CONTO_H
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __REAL_H
#include <real.h>
#ifndef __ISAM_H
#include <isam.h>
#endif
class TBill : public TSortable
@ -24,11 +20,13 @@ protected:
virtual const char* class_name() const { return "Conto"; }
const TBill& copy(const TBill& b);
const char* file2type(int logicnum) const;
public:
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(' ')
{ set(g,c,s,t,d,r);}
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d),
_sezione(' '), _sospeso(FALSE)
{ set(g,c,s,t,d,r);}
TBill(TToken_string& tgcsd, int from, int mode = 0);
TBill(const TBill& b) { copy(b); }
@ -57,6 +55,9 @@ public:
bool sospeso() const { return _sospeso; } // _sospeso e' letto nella read()
char sezione() const { return _sezione; }
void put(TRectype& r) const;
bool get(const TRectype& r);
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* data)
{
bool nwr = FALSE;
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(perc.string(),1); // percentuale
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);
if (!nwr)
{
if (index > _rate.items())
{
error_box("Rate non contigue");
delete tt;
}
}
{
if (index > _rate.items())
{
error_box("Rate non contigue");
delete tt;
}
}
else
{
_rate.add(tt,index);
_dirty = TRUE;
}
{
_rate.add(tt,index);
_dirty = TRUE;
}
return *tt;
}
@ -248,14 +249,15 @@ void TPagamento::set_imprata(int i, real r)
tt.add(r.string(), 4);
}
TToken_string& TPagamento::set_rata(int index, real howmuch,
TDate& date, int type,const char* ulc, bool pagato)
TToken_string& TPagamento::set_rata(int index, const real& howmuch,
const TDate& date, int type,const char* ulc, bool pagato)
{
// calcola percentuali e scadenze a partire dagli importi
bool nwr = FALSE;
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;
int day = date - oldd;
@ -273,18 +275,18 @@ TToken_string& TPagamento::set_rata(int index, real howmuch,
if (pagato) tt->add("X",6);
if (!nwr)
{
if (index > _rate.items())
{
if (index > _rate.items())
{
error_box("Rate non contigue");
delete tt;
}
}
}
else
{
_rate.add(tt,index);
_dirty = TRUE;
}
{
_rate.add(tt, index);
_dirty = TRUE;
}
return *tt;
}

View File

@ -103,7 +103,7 @@ public:
const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL);
// 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);
void remove_rata(int r);