Embrioni disseccati e scheletrici di sc2, stampa speranzosa degli

estratti conto


git-svn-id: svn://10.65.10.50/trunk@2093 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-11-06 11:10:50 +00:00
parent 80ecf677c5
commit 6f39d41a3e
13 changed files with 1379 additions and 728 deletions

View File

@ -1,22 +1,22 @@
#include <xvt.h>
#include <stdlib.h>
#include <checks.h>
#include "sc0.h"
#define usage "Errore - uso : sc0 -{0}"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (atoi(&argv[1][1])) : 0;
switch(n)
{
case 0:
sc0100(argc,argv); break;
default:
error_box(usage);
}
return 0;
}
#include <xvt.h>
#include <stdlib.h>
#include <checks.h>
#include "sc0.h"
#define usage "Errore - uso : sc0 -{0}"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (atoi(&argv[1][1])) : 0;
switch(n)
{
case 0:
sc0100(argc,argv); break;
default:
error_box(usage);
}
return 0;
}

View File

@ -1,55 +1,55 @@
#include <stdarg.h>
#include <mask.h>
#include <urldefid.h>
#include "sc0100.h"
bool TSaldaconto_app::create()
{
open_files(LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0);
_msk = new TMask("sc0100a");
dispatch_e_menu(MENU_ITEM(1));
return TRUE;
}
bool TSaldaconto_app::destroy()
{
delete _msk;
close_files();
return TRUE;
}
void TSaldaconto_app::open_files(int logicnum, ...)
{
va_list marker;
va_start(marker, logicnum);
while (logicnum > 0)
{
CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
_file.add(new TLocalisamfile(logicnum), logicnum);
logicnum = va_arg(marker, int);
}
}
bool TSaldaconto_app::menu(MENU_TAG)
{
KEY k;
TMask& m = curr_mask();
do
{
k = m.run();
if (k == K_ENTER)
edit_partite(m);
} while (k != K_QUIT);
return 0;
}
int sc0100(int argc, char* argv[])
{
TSaldaconto_app app;
app.run(argc, argv, "Gestione Saldaconto");
return 0;
#include <stdarg.h>
#include <mask.h>
#include <urldefid.h>
#include "sc0100.h"
bool TSaldaconto_app::create()
{
open_files(LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0);
_msk = new TMask("sc0100a");
dispatch_e_menu(MENU_ITEM(1));
return TRUE;
}
bool TSaldaconto_app::destroy()
{
delete _msk;
close_files();
return TRUE;
}
void TSaldaconto_app::open_files(int logicnum, ...)
{
va_list marker;
va_start(marker, logicnum);
while (logicnum > 0)
{
CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
_file.add(new TLocalisamfile(logicnum), logicnum);
logicnum = va_arg(marker, int);
}
}
bool TSaldaconto_app::menu(MENU_TAG)
{
KEY k;
TMask& m = curr_mask();
do
{
k = m.run();
if (k == K_ENTER)
edit_partite(m);
} while (k != K_QUIT);
return 0;
}
int sc0100(int argc, char* argv[])
{
TSaldaconto_app app;
app.run(argc, argv, "Gestione Saldaconto");
return 0;
}

View File

@ -1,44 +1,44 @@
#ifndef __SC100_H
#define __SC100_H
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __SALDACON_H
#include "../cg/saldacon.h"
#endif
#ifndef __MASK_H
class TMask;
#endif
class TSaldaconto_app : public TApplication
{
TMask* _msk;
TArray _file;
TPartite_array _partite;
protected: // TApplication
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG tag);
protected:
void open_files(int logicnum, ...);
void close_files() { _file.destroy(); }
void edit_partite(const TMask& m);
public:
TMask& curr_mask() { return *_msk; }
TPartite_array& partite() { return _partite; }
TSaldaconto_app() : _file(32) {}
virtual ~TSaldaconto_app() {}
};
inline TSaldaconto_app& app() { return (TSaldaconto_app&)main_app(); }
#endif
#ifndef __SC100_H
#define __SC100_H
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __SALDACON_H
#include "../cg/saldacon.h"
#endif
#ifndef __MASK_H
class TMask;
#endif
class TSaldaconto_app : public TApplication
{
TMask* _msk;
TArray _file;
TPartite_array _partite;
protected: // TApplication
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG tag);
protected:
void open_files(int logicnum, ...);
void close_files() { _file.destroy(); }
void edit_partite(const TMask& m);
public:
TMask& curr_mask() { return *_msk; }
TPartite_array& partite() { return _partite; }
TSaldaconto_app() : _file(32) {}
virtual ~TSaldaconto_app() {}
};
inline TSaldaconto_app& app() { return (TSaldaconto_app&)main_app(); }
#endif

View File

@ -1,13 +1,13 @@
#define F_TIPO 101
#define F_GRUPPO 102
#define F_CONTO 103
#define F_SOTTOCONTO 104
#define F_CLIENTE 204
#define F_FORNITORE 304
#define F_DESCR 105
#define F_DESCRCLI 205
#define F_DESCRFOR 305
#define F_FATPAG 106
#define F_ANNO 107
#define F_NUMERO 108
#define F_TIPO 101
#define F_GRUPPO 102
#define F_CONTO 103
#define F_SOTTOCONTO 104
#define F_CLIENTE 204
#define F_FORNITORE 304
#define F_DESCR 105
#define F_DESCRCLI 205
#define F_DESCRFOR 305
#define F_FATPAG 106
#define F_ANNO 107
#define F_NUMERO 108
#define F_RIGA 109

View File

@ -1,158 +1,158 @@
#include "sc0100a.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Selezione partite" -1 -1 77 20
LIST F_TIPO 1 12
BEGIN
PROMPT 1 1 "Tipo conto "
ITEM " |Conto"
MESSAGE SHOW,1@|RESET,1@|HIDE,2@|HIDE,3@
ITEM "C|Cliente"
MESSAGE HIDE,1@|SHOW,2@|RESET,2@|HIDE,3@
ITEM "F|Fornitore"
MESSAGE HIDE,1@|HIDE,2@|SHOW,3@|RESET,3@
END
NUMBER F_GRUPPO 3
BEGIN
PROMPT 26 1 "Gruppo "
USE LF_PCON SELECT CONTO==""
INPUT GRUPPO F_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F_CONTO 3
BEGIN
PROMPT 40 1 "Conto "
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TMCF
OUTPUT F_TIPO TMCF
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F_SOTTOCONTO 6
BEGIN
PROMPT 54 1 "Sottoconto "
USE LF_PCON SELECT SOTTOCONTO!=""
COPY INPUT F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
OUTPUT F_SOTTOCONTO SOTTOCONTO
OUTPUT F_DESCR DESCR
ADD RUN cg0 -0
GROUP 1
CHECKTYPE REQUIRED
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 54 1 "Cliente "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Cliente" CODCF
DISPLAY "Descrizione@50" RAGSOC
// OUTPUT F_GRUPPO GRUPPO
// OUTPUT F_CONTO CONTO
OUTPUT F_CLIENTE CODCF
OUTPUT F_DESCRCLI RAGSOC
ADD RUN cg0 -1 C
GROUP 2
CHECKTYPE REQUIRED
MESSAGE COPY,F_SOTTOCONTO
END
NUMBER F_FORNITORE 6
BEGIN
PROMPT 54 1 "Fornitore "
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Fornitore" CODCF
DISPLAY "Descrizione@50" RAGSOC
// OUTPUT F_GRUPPO GRUPPO
// OUTPUT F_CONTO CONTO
OUTPUT F_FORNITORE CODCF
OUTPUT F_DESCRFOR RAGSOC
ADD RUN cg0 -1 F
GROUP 3
CHECKTYPE REQUIRED
MESSAGE COPY,F_SOTTOCONTO
END
STRING F_DESCR 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_PCON KEY 2
INPUT DESCR F_DESCR
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SOTTOCONTO
CHECKTYPE REQUIRED
GROUP 1
ADD RUN cg0 -0
END
STRING F_DESCRCLI 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_DESCRCLI
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
COPY OUTPUT F_CLIENTE
CHECKTYPE REQUIRED
GROUP 2
ADD RUN cg0 -1
END
STRING F_DESCRFOR 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_PCON KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_DESCRFOR
COPY DISPLAY F_DESCRCLI
COPY OUTPUT F_FORNITORE
CHECKTYPE REQUIRED
GROUP 3
ADD RUN cg0 -1
END
ENDMASK
#include "sc0100a.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Selezione partite" -1 -1 77 20
LIST F_TIPO 1 12
BEGIN
PROMPT 1 1 "Tipo conto "
ITEM " |Conto"
MESSAGE SHOW,1@|RESET,1@|HIDE,2@|HIDE,3@
ITEM "C|Cliente"
MESSAGE HIDE,1@|SHOW,2@|RESET,2@|HIDE,3@
ITEM "F|Fornitore"
MESSAGE HIDE,1@|HIDE,2@|SHOW,3@|RESET,3@
END
NUMBER F_GRUPPO 3
BEGIN
PROMPT 26 1 "Gruppo "
USE LF_PCON SELECT CONTO==""
INPUT GRUPPO F_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F_CONTO 3
BEGIN
PROMPT 40 1 "Conto "
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TMCF
OUTPUT F_TIPO TMCF
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F_SOTTOCONTO 6
BEGIN
PROMPT 54 1 "Sottoconto "
USE LF_PCON SELECT SOTTOCONTO!=""
COPY INPUT F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
OUTPUT F_SOTTOCONTO SOTTOCONTO
OUTPUT F_DESCR DESCR
ADD RUN cg0 -0
GROUP 1
CHECKTYPE REQUIRED
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 54 1 "Cliente "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Cliente" CODCF
DISPLAY "Descrizione@50" RAGSOC
// OUTPUT F_GRUPPO GRUPPO
// OUTPUT F_CONTO CONTO
OUTPUT F_CLIENTE CODCF
OUTPUT F_DESCRCLI RAGSOC
ADD RUN cg0 -1 C
GROUP 2
CHECKTYPE REQUIRED
MESSAGE COPY,F_SOTTOCONTO
END
NUMBER F_FORNITORE 6
BEGIN
PROMPT 54 1 "Fornitore "
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Fornitore" CODCF
DISPLAY "Descrizione@50" RAGSOC
// OUTPUT F_GRUPPO GRUPPO
// OUTPUT F_CONTO CONTO
OUTPUT F_FORNITORE CODCF
OUTPUT F_DESCRFOR RAGSOC
ADD RUN cg0 -1 F
GROUP 3
CHECKTYPE REQUIRED
MESSAGE COPY,F_SOTTOCONTO
END
STRING F_DESCR 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_PCON KEY 2
INPUT DESCR F_DESCR
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SOTTOCONTO
CHECKTYPE REQUIRED
GROUP 1
ADD RUN cg0 -0
END
STRING F_DESCRCLI 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_DESCRCLI
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
COPY OUTPUT F_CLIENTE
CHECKTYPE REQUIRED
GROUP 2
ADD RUN cg0 -1
END
STRING F_DESCRFOR 50 58
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_PCON KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_DESCRFOR
COPY DISPLAY F_DESCRCLI
COPY OUTPUT F_FORNITORE
CHECKTYPE REQUIRED
GROUP 3
ADD RUN cg0 -1
END
ENDMASK

View File

@ -1,21 +1,21 @@
#include "../cg/cg21sld.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
#include "../cg/cg21sld.uml"
ENDMASK
#include "../cg/cg21rata.uml"
#include "../cg/cg21sld.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
#include "../cg/cg21sld.uml"
ENDMASK
#include "../cg/cg21rata.uml"

View File

@ -1,417 +1,417 @@
#include "../cg/conto.h"
#include "../cg/pagament.h"
#include "../cg/saldacon.h"
#include "../cg/cg21sld.h"
#include "sc0100.h"
#include "sc0100a.h"
#define __EXTRA__
#include "../cg/cg2105.cpp"
///////////////////////////////////////////////////////////
// Maschera gestione rate
///////////////////////////////////////////////////////////
class TFattura_mask : public TMask
{
TRiga_partite& _fattura;
TPagamento* _pag;
TString_array _pag_rows;
protected: // TMask
virtual void start_run();
virtual bool stop_run(KEY k);
protected:
static bool pag_notify(TSheet_field& ps, int r, KEY k);
static bool pag_handler(TMask_field& f, KEY key);
static bool reset_handler(TMask_field& f, KEY key);
static bool recalc_handler(TMask_field& f, KEY key);
static bool nrate_handler(TMask_field& f, KEY key);
static bool codcab_handler(TMask_field& f, KEY key);
TSheet_field& pag_sheet() const { return (TSheet_field&)field(FS_RATESHEET); }
void read_scadenze();
void write_scadenze() const;
public:
TFattura_mask(TRiga_partite& fattura, const TString& codpag);
virtual ~TFattura_mask() {}
};
TFattura_mask::TFattura_mask(TRiga_partite& fattura, const TString& codpag)
: TMask("sc0100b"), _fattura(fattura), _pag(NULL)
{
set_handler(FS_RESET, reset_handler);
set_handler(FS_RECALC, recalc_handler);
set_handler(FS_NRATE, nrate_handler);
set_handler(FS_NSCAB, codcab_handler);
set_handler(FS_VSCAB, codcab_handler);
pag_sheet().set_notify(pag_notify);
pag_sheet().set_handler(pag_handler);
const TRiga_partite& partita = _fattura;
const TString16 datadoc = partita.get(PART_DATADOC);
_pag = new TPagamento(codpag, datadoc);
}
void TFattura_mask::start_run()
{
read_scadenze();
}
bool TFattura_mask::stop_run(KEY k)
{
const bool ok = TMask::stop_run(k);
if (ok && k == K_ENTER)
write_scadenze();
return ok;
}
bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
{
if (k == K_INS || k == K_DEL)
return FALSE;
if (k != K_ENTER)
return TRUE;
TFattura_mask& fm = (TFattura_mask&)ps.mask();
TPagamento& pag = *fm._pag;
TString_array& rws = fm._pag_rows;
const int rdiff = fm.get_int(FS_RDIFFER);
const bool in_valuta = pag.in_valuta();
const int impos = in_valuta ? 2 : 1;
bool doit = TRUE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
bool m_scad = FALSE, m_tipo = FALSE, mod = FALSE;
word ahiahi = P_OK;
const bool recalc = fm.get_bool(FS_RECALC);
const bool mcomm = fm.get_bool(FS_MCOMM);
TToken_string ns = ps.row(r);
TToken_string ts = rws.row(r);
const TString news = ns.get(0); // Data scadenza
const TString newi = ns.get(impos); // Imponibile (lire o valuta)
const TString newp = ns.get(3); // Percentuale
const TString newt = ns.get(4); // Tipo pagamento
// qui viene il bello, si fa per dire
if (news != ts.get(0)) // modificata data scadenza
mod = m_scad = TRUE;
if (newp != ts.get(3)) // modificata percentuale
mod = m_perc = TRUE;
if (newi != ts.get(impos)) // modificato importo
{
// se si modifica la percentuale l'importo non viene cagato
if ((recalc && !m_perc) || (!recalc))
mod = m_imp = TRUE;
}
if (newt != ts.get(4)) // modificato tipo pagamento
mod = m_tipo = TRUE;
// settato da recalc_rate se occorre ridefinire lo sheet
// aggiungendo o togliendo righe
bool need_recalc = FALSE;
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);
// see if rdiff changed
fm.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
fm.set(FS_NRATE, pag.n_rate());
}
if (!recalc)
{
ahiahi = P_OK;
// put data as they are
TToken_string& trw = pag.rata(r);
TToken_string srw = trw;
if (m_tipo) trw.add(newt,2);
if (m_scad) trw.add(news,3);
if (m_imp)
{
trw.add(newi,4);
const real p = pag.recalc_percrata(r);
ps.row(r).add(p.string(), 3);
rws.row(r) = ps.row(r);
ps.force_update(r);
}
}
if (ahiahi) // any error? Rimetti le righe com'erano prima
{
if (recalc)
{
beep();
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);
rws = ps.rows_array();
}
return doit;
}
bool TFattura_mask::pag_handler(TMask_field& f, KEY key)
{
if (key == K_TAB || key == K_ENTER)
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
TPagamento& pag = *fm._pag;
const word err = pag.validate();
if (err != P_OK)
{
TString256 s;
pag.strerr(err, s);
return error_box(s);
}
}
return TRUE;
}
bool TFattura_mask::reset_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
if (fm._fattura.rate() == 0)
fm._pag->read();
fm.read_scadenze();
}
return TRUE;
}
bool TFattura_mask::recalc_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
const bool on = f.get().not_empty();
const TMask& m = f.mask();
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
ps.enable_column(3, on);
}
return TRUE;
}
bool TFattura_mask::nrate_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
TPagamento& pag = *fm._pag;
pag.set_numero_rate(atoi(f.get()));
if (pag.dirty())
{
TSheet_field& ps = (TSheet_field&)fm.field(FS_RATESHEET);
pag.set_sheet(ps);
}
}
return TRUE;
}
bool TFattura_mask::codcab_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
const TMask& m = f.mask();
const short id = f.dlg() == FS_NSCAB ? FS_NSABI : FS_VSABI;
const int pos = id == FS_NSABI ? 6 : 8;
const TString16 abi = m.get(id);
const TString16 cab = m.get(id+1);
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
for (int i = ps.items()-1; i >= 0; i--)
{
TToken_string& row = ps.row(i);
row.add(abi, pos);
row.add(cab, pos+1);
}
ps.force_update();
}
return TRUE;
}
void TFattura_mask::read_scadenze()
{
TRiga_partite& partita = _fattura;
TPagamento& pag = *_pag;
TSheet_field& ps = pag_sheet();
real imponibile, imposte, spese, cambio;
if (partita.in_valuta())
{
imponibile = partita.get_real(PART_IMPORTOVAL);
cambio = partita.get_real(PART_CAMBIO);
real imp = imponibile;
imp *= cambio;
imp.round();
set(FS_IMPONIBILI, imp);
}
else
{
imponibile = partita.get_real(PART_IMPORTO);
set(FS_IMPONIBILI, imponibile);
}
pag.set_total(imponibile, imposte, spese);
pag.set_cambio(cambio);
if (partita.rate() > 0)
{
pag.zap_rate();
for (int i = 1; i <= partita.rate(); i++)
{
const TRiga_scadenze& scadenza = partita.rata(i);
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);
if (scadenza.in_valuta())
{
const real impval(scadenza.get(SCAD_IMPORTOVAL));
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, paid);
}
else
pag.set_rata(i-1, importo, ZERO, scad, tipop, ulc, paid);
TToken_string& str = ps.row(i-1);
str.add(scadenza.get(SCAD_CODABIPR), 6);
str.add(scadenza.get(SCAD_CODCABPR), 7);
str.add(scadenza.get(SCAD_CODABI), 8);
str.add(scadenza.get(SCAD_CODCAB), 9);
if (i == 1)
{
set(FS_NSABI, str.get(6));
set(FS_NSCAB, str.get(7));
set(FS_VSABI, str.get(8));
set(FS_VSCAB, str.get(9));
set(FS_AGENTE, scadenza.get(SCAD_CODAG));
}
}
}
else
{
pag.set_rate_auto();
}
set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
set(FS_NAMEPAG, pag.name());
set(FS_TIPOPR, pag.desc_tpr());
set(FS_MCOMM, pag.mese_commerciale() ? "X" : "");
set(FS_RECALC, "X", TRUE);
set(FS_NRATE, pag.n_rate());
pag.set_sheet(ps);
_pag_rows = ps.rows_array();
// se la prima rata e' fissa non si tocca
if (pag.tipo_prima_rata() > 3)
ps.disable_cell(0,-1);
}
void TFattura_mask::write_scadenze() const
{
CHECK(_pag, "Null pagament");
const TPagamento& pag = *_pag;
TRiga_partite& partita = _fattura;
TSheet_field& ps = pag_sheet();
const TString agente = get(FS_AGENTE);
partita.elimina_rate();
for (int i = 0; i < pag.n_rate(); i++)
{
TToken_string& row = ps.row(i);
TRiga_scadenze& scadenza = partita.new_row();
scadenza.put(SCAD_CODPAG, pag.code());
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
if (partita.in_valuta())
{
scadenza.put(SCAD_IMPORTO, pag.tlit_rata(i));
scadenza.put(SCAD_IMPORTOVAL, pag.tpay_rata(i));
}
else
{
scadenza.put(SCAD_IMPORTO, pag.tpay_rata(i));
scadenza.zero(SCAD_IMPORTOVAL);
}
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
scadenza.put(SCAD_CODABIPR, row.get(6));
scadenza.put(SCAD_CODCABPR, row.get(7));
scadenza.put(SCAD_CODABI, row.get(8));
scadenza.put(SCAD_CODCAB, row.get(9));
scadenza.put(SCAD_PAGATA, pag.ratapagata(i));
scadenza.put(SCAD_CODAG, agente);
}
}
///////////////////////////////////////////////////////////
// Addendum alla maschera gestione partite
///////////////////////////////////////////////////////////
bool TGame_mask::edit_fattura(TPartita& p, int nriga)
{
TString16 codpag;
const bool nuova = nriga <= 0;
if (nuova)
nriga = nuova_riga(p);
TRiga_partite& f = p.riga(nriga);
if (f.rate() > 0)
_codpag = f.rata(1).get(SCAD_CODPAG);
TFattura_mask fm(f, _codpag);
const bool ok = fm.run() == K_ENTER;
if (nuova && !ok)
p.rimuovi_riga(nriga);
return ok;
}
///////////////////////////////////////////////////////////
// Gestione partite extra-contabili
///////////////////////////////////////////////////////////
void TSaldaconto_app::edit_partite(const TMask& m)
{
TBill b; // Legge il conto della riga selezionata
b.set(m.get_int(F_GRUPPO), m.get_int(F_CONTO),
m.get_long(F_SOTTOCONTO), m.get(F_TIPO)[0]);
TGame_mask gm(b, 0, 0);
gm.run();
if (gm.changed() && yesno_box("Si vogliono salvare le partite modificate?"))
partite().rewrite();
partite().destroy();
}
#include "../cg/conto.h"
#include "../cg/pagament.h"
#include "../cg/saldacon.h"
#include "../cg/cg21sld.h"
#include "sc0100.h"
#include "sc0100a.h"
#define __EXTRA__
#include "../cg/cg2105.cpp"
///////////////////////////////////////////////////////////
// Maschera gestione rate
///////////////////////////////////////////////////////////
class TFattura_mask : public TMask
{
TRiga_partite& _fattura;
TPagamento* _pag;
TString_array _pag_rows;
protected: // TMask
virtual void start_run();
virtual bool stop_run(KEY k);
protected:
static bool pag_notify(TSheet_field& ps, int r, KEY k);
static bool pag_handler(TMask_field& f, KEY key);
static bool reset_handler(TMask_field& f, KEY key);
static bool recalc_handler(TMask_field& f, KEY key);
static bool nrate_handler(TMask_field& f, KEY key);
static bool codcab_handler(TMask_field& f, KEY key);
TSheet_field& pag_sheet() const { return (TSheet_field&)field(FS_RATESHEET); }
void read_scadenze();
void write_scadenze() const;
public:
TFattura_mask(TRiga_partite& fattura, const TString& codpag);
virtual ~TFattura_mask() {}
};
TFattura_mask::TFattura_mask(TRiga_partite& fattura, const TString& codpag)
: TMask("sc0100b"), _fattura(fattura), _pag(NULL)
{
set_handler(FS_RESET, reset_handler);
set_handler(FS_RECALC, recalc_handler);
set_handler(FS_NRATE, nrate_handler);
set_handler(FS_NSCAB, codcab_handler);
set_handler(FS_VSCAB, codcab_handler);
pag_sheet().set_notify(pag_notify);
pag_sheet().set_handler(pag_handler);
const TRiga_partite& partita = _fattura;
const TString16 datadoc = partita.get(PART_DATADOC);
_pag = new TPagamento(codpag, datadoc);
}
void TFattura_mask::start_run()
{
read_scadenze();
}
bool TFattura_mask::stop_run(KEY k)
{
const bool ok = TMask::stop_run(k);
if (ok && k == K_ENTER)
write_scadenze();
return ok;
}
bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
{
if (k == K_INS || k == K_DEL)
return FALSE;
if (k != K_ENTER)
return TRUE;
TFattura_mask& fm = (TFattura_mask&)ps.mask();
TPagamento& pag = *fm._pag;
TString_array& rws = fm._pag_rows;
const int rdiff = fm.get_int(FS_RDIFFER);
const bool in_valuta = pag.in_valuta();
const int impos = in_valuta ? 2 : 1;
bool doit = TRUE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
bool m_scad = FALSE, m_tipo = FALSE, mod = FALSE;
word ahiahi = P_OK;
const bool recalc = fm.get_bool(FS_RECALC);
const bool mcomm = fm.get_bool(FS_MCOMM);
TToken_string ns = ps.row(r);
TToken_string ts = rws.row(r);
const TString news = ns.get(0); // Data scadenza
const TString newi = ns.get(impos); // Imponibile (lire o valuta)
const TString newp = ns.get(3); // Percentuale
const TString newt = ns.get(4); // Tipo pagamento
// qui viene il bello, si fa per dire
if (news != ts.get(0)) // modificata data scadenza
mod = m_scad = TRUE;
if (newp != ts.get(3)) // modificata percentuale
mod = m_perc = TRUE;
if (newi != ts.get(impos)) // modificato importo
{
// se si modifica la percentuale l'importo non viene cagato
if ((recalc && !m_perc) || (!recalc))
mod = m_imp = TRUE;
}
if (newt != ts.get(4)) // modificato tipo pagamento
mod = m_tipo = TRUE;
// settato da recalc_rate se occorre ridefinire lo sheet
// aggiungendo o togliendo righe
bool need_recalc = FALSE;
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);
// see if rdiff changed
fm.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
fm.set(FS_NRATE, pag.n_rate());
}
if (!recalc)
{
ahiahi = P_OK;
// put data as they are
TToken_string& trw = pag.rata(r);
TToken_string srw = trw;
if (m_tipo) trw.add(newt,2);
if (m_scad) trw.add(news,3);
if (m_imp)
{
trw.add(newi,4);
const real p = pag.recalc_percrata(r);
ps.row(r).add(p.string(), 3);
rws.row(r) = ps.row(r);
ps.force_update(r);
}
}
if (ahiahi) // any error? Rimetti le righe com'erano prima
{
if (recalc)
{
beep();
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);
rws = ps.rows_array();
}
return doit;
}
bool TFattura_mask::pag_handler(TMask_field& f, KEY key)
{
if (key == K_TAB || key == K_ENTER)
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
TPagamento& pag = *fm._pag;
const word err = pag.validate();
if (err != P_OK)
{
TString256 s;
pag.strerr(err, s);
return error_box(s);
}
}
return TRUE;
}
bool TFattura_mask::reset_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
if (fm._fattura.rate() == 0)
fm._pag->read();
fm.read_scadenze();
}
return TRUE;
}
bool TFattura_mask::recalc_handler(TMask_field& f, KEY key)
{
if (key == K_SPACE)
{
const bool on = f.get().not_empty();
const TMask& m = f.mask();
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
ps.enable_column(3, on);
}
return TRUE;
}
bool TFattura_mask::nrate_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TFattura_mask& fm = (TFattura_mask&)f.mask();
TPagamento& pag = *fm._pag;
pag.set_numero_rate(atoi(f.get()));
if (pag.dirty())
{
TSheet_field& ps = (TSheet_field&)fm.field(FS_RATESHEET);
pag.set_sheet(ps);
}
}
return TRUE;
}
bool TFattura_mask::codcab_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
const TMask& m = f.mask();
const short id = f.dlg() == FS_NSCAB ? FS_NSABI : FS_VSABI;
const int pos = id == FS_NSABI ? 6 : 8;
const TString16 abi = m.get(id);
const TString16 cab = m.get(id+1);
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
for (int i = ps.items()-1; i >= 0; i--)
{
TToken_string& row = ps.row(i);
row.add(abi, pos);
row.add(cab, pos+1);
}
ps.force_update();
}
return TRUE;
}
void TFattura_mask::read_scadenze()
{
TRiga_partite& partita = _fattura;
TPagamento& pag = *_pag;
TSheet_field& ps = pag_sheet();
real imponibile, imposte, spese, cambio;
if (partita.in_valuta())
{
imponibile = partita.get_real(PART_IMPORTOVAL);
cambio = partita.get_real(PART_CAMBIO);
real imp = imponibile;
imp *= cambio;
imp.round();
set(FS_IMPONIBILI, imp);
}
else
{
imponibile = partita.get_real(PART_IMPORTO);
set(FS_IMPONIBILI, imponibile);
}
pag.set_total(imponibile, imposte, spese);
pag.set_cambio(cambio);
if (partita.rate() > 0)
{
pag.zap_rate();
for (int i = 1; i <= partita.rate(); i++)
{
const TRiga_scadenze& scadenza = partita.rata(i);
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);
if (scadenza.in_valuta())
{
const real impval(scadenza.get(SCAD_IMPORTOVAL));
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, paid);
}
else
pag.set_rata(i-1, importo, ZERO, scad, tipop, ulc, paid);
TToken_string& str = ps.row(i-1);
str.add(scadenza.get(SCAD_CODABIPR), 6);
str.add(scadenza.get(SCAD_CODCABPR), 7);
str.add(scadenza.get(SCAD_CODABI), 8);
str.add(scadenza.get(SCAD_CODCAB), 9);
if (i == 1)
{
set(FS_NSABI, str.get(6));
set(FS_NSCAB, str.get(7));
set(FS_VSABI, str.get(8));
set(FS_VSCAB, str.get(9));
set(FS_AGENTE, scadenza.get(SCAD_CODAG));
}
}
}
else
{
pag.set_rate_auto();
}
set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
set(FS_NAMEPAG, pag.name());
set(FS_TIPOPR, pag.desc_tpr());
set(FS_MCOMM, pag.mese_commerciale() ? "X" : "");
set(FS_RECALC, "X", TRUE);
set(FS_NRATE, pag.n_rate());
pag.set_sheet(ps);
_pag_rows = ps.rows_array();
// se la prima rata e' fissa non si tocca
if (pag.tipo_prima_rata() > 3)
ps.disable_cell(0,-1);
}
void TFattura_mask::write_scadenze() const
{
CHECK(_pag, "Null pagament");
const TPagamento& pag = *_pag;
TRiga_partite& partita = _fattura;
TSheet_field& ps = pag_sheet();
const TString agente = get(FS_AGENTE);
partita.elimina_rate();
for (int i = 0; i < pag.n_rate(); i++)
{
TToken_string& row = ps.row(i);
TRiga_scadenze& scadenza = partita.new_row();
scadenza.put(SCAD_CODPAG, pag.code());
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
if (partita.in_valuta())
{
scadenza.put(SCAD_IMPORTO, pag.tlit_rata(i));
scadenza.put(SCAD_IMPORTOVAL, pag.tpay_rata(i));
}
else
{
scadenza.put(SCAD_IMPORTO, pag.tpay_rata(i));
scadenza.zero(SCAD_IMPORTOVAL);
}
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
scadenza.put(SCAD_CODABIPR, row.get(6));
scadenza.put(SCAD_CODCABPR, row.get(7));
scadenza.put(SCAD_CODABI, row.get(8));
scadenza.put(SCAD_CODCAB, row.get(9));
scadenza.put(SCAD_PAGATA, pag.ratapagata(i));
scadenza.put(SCAD_CODAG, agente);
}
}
///////////////////////////////////////////////////////////
// Addendum alla maschera gestione partite
///////////////////////////////////////////////////////////
bool TGame_mask::edit_fattura(TPartita& p, int nriga)
{
TString16 codpag;
const bool nuova = nriga <= 0;
if (nuova)
nriga = nuova_riga(p);
TRiga_partite& f = p.riga(nriga);
if (f.rate() > 0)
_codpag = f.rata(1).get(SCAD_CODPAG);
TFattura_mask fm(f, _codpag);
const bool ok = fm.run() == K_ENTER;
if (nuova && !ok)
p.rimuovi_riga(nriga);
return ok;
}
///////////////////////////////////////////////////////////
// Gestione partite extra-contabili
///////////////////////////////////////////////////////////
void TSaldaconto_app::edit_partite(const TMask& m)
{
TBill b; // Legge il conto della riga selezionata
b.set(m.get_int(F_GRUPPO), m.get_int(F_CONTO),
m.get_long(F_SOTTOCONTO), m.get(F_TIPO)[0]);
TGame_mask gm(b, 0, 0);
gm.run();
if (gm.changed() && yesno_box("Si vogliono salvare le partite modificate?"))
partite().rewrite();
partite().destroy();
}

21
sc/sc2.cpp Executable file
View File

@ -0,0 +1,21 @@
#include <xvt.h>
#include <stdlib.h>
#include <checks.h>
#include "sc2.h"
#define usage "Errore - uso : sc2 -0"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (atoi(&argv[1][1])) : 0;
switch(n)
{
case 0:
sc2100(argc,argv); break;
default:
error_box(usage);
}
return 0;
}

3
sc/sc2.h Executable file
View File

@ -0,0 +1,3 @@
int sc2100(int argc, char** argv);

10
sc/sc2.url Executable file
View File

@ -0,0 +1,10 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"

396
sc/sc2100.cpp Executable file
View File

@ -0,0 +1,396 @@
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#endif
#ifndef __FORM_H
#include <form.h>
#endif
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __URLDEFID_H
#include <urldefid.h>
#endif
#ifndef __SHEET_H
#include <sheet.h>
#endif
#ifndef __LFFILES_H
#include <lffiles.h>
#endif
#include "sc2.h"
#include "sc2100a.h"
class TStampaEC_application : public TApplication
{
enum what {clienti, fornitori};
// begin AARGH
TRelation* _clifo_rel;
TCursor* _cli_cur_k1;
TCursor* _cli_cur_k2;
TCursor* _for_cur_k1;
TCursor* _for_cur_k2;
TCursor_sheet* _cli_sh_k1;
TCursor_sheet* _cli_sh_k2;
TCursor_sheet* _for_sh_k1;
TCursor_sheet* _for_sh_k2;
// end AARGH
what _what;
int _key;
TBit_array _selected;
TRelation* _ditta;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
long select_clifo_range(TMask& m, long from, long to);
static TStampaEC_application& app() { return (TStampaEC_application&)main_app(); }
// handlers
static bool bfrom_handler(TMask_field& f, KEY k);
static bool bto_handler(TMask_field& f, KEY k);
static bool ffrom_handler(TMask_field& f, KEY k);
static bool fto_handler(TMask_field& f, KEY k);
static bool breset_handler(TMask_field& f, KEY k);
static bool bselect_handler(TMask_field& f, KEY k);
static bool rclifo_handler(TMask_field& f, KEY k);
static bool rsortcf_handler(TMask_field& f, KEY k);
void set_clifo_limits(TMask&);
public:
bool select_ec(); // starting point
bool print_selected();
bool print_ec(long clifo);
TCursor_sheet* cur_sheet();
// utils per handlers
void reset_sheets(TMask& m);
void set_what(what w) {_what = w; }
void set_key (int k) {_key = k; }
TStampaEC_application();
virtual ~TStampaEC_application() {}
};
// handlers
bool TStampaEC_application::bfrom_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
app().cur_sheet()->disable_check();
if (app().cur_sheet()->run() == K_ENTER)
{
TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
long cod1 = t.get_long(1);
long cod2 = f.mask().get_long(F_CFCODTO);
f.mask().set(F_CFCODFR, cod1);
app().select_clifo_range(f.mask(), cod1, cod2);
}
}
return TRUE;
}
bool TStampaEC_application::bto_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
app().cur_sheet()->disable_check();
if (app().cur_sheet()->run() == K_ENTER)
{
TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
long cod2 = t.get_long(1);
long cod1 = f.mask().get_long(F_CFCODFR);
f.mask().set(F_CFCODTO, cod2);
app().select_clifo_range(f.mask(), cod1, cod2);
}
}
return TRUE;
}
bool TStampaEC_application::ffrom_handler(TMask_field& f, KEY k)
{
if (!f.focusdirty()) return TRUE;
if (k == K_TAB)
{
long cod1 = atol(f.get());
long cod2 = f.mask().get_long(F_CFCODTO);
app().select_clifo_range(f.mask(), cod1, cod2);
}
else if (k == K_F9)
app().bfrom_handler(f.mask().field(B_CFCODFR), K_SPACE);
return TRUE;
}
bool TStampaEC_application::fto_handler(TMask_field& f, KEY k)
{
if (!f.focusdirty()) return TRUE;
if (k == K_TAB)
{
long cod2 = atol(f.get());
long cod1 = f.mask().get_long(F_CFCODFR);
app().select_clifo_range(f.mask(), cod1, cod2);
}
else if (k == K_F9)
app().bfrom_handler(f.mask().field(B_CFCODTO), K_SPACE);
return TRUE;
}
bool TStampaEC_application::breset_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
app().reset_sheets(f.mask());
return TRUE;
}
bool TStampaEC_application::bselect_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
app().cur_sheet()->enable_check();
app().cur_sheet()->run();
}
app().set_clifo_limits(f.mask());
return TRUE;
}
bool TStampaEC_application::rclifo_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
app().set_what(f.get() == "1" ? clienti : fornitori);
app().reset_sheets(f.mask());
}
return TRUE;
}
bool TStampaEC_application::rsortcf_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
app().set_key(atoi(f.get()));
app().reset_sheets(f.mask());
}
return TRUE;
}
long TStampaEC_application::select_clifo_range(TMask& m, long from, long to)
{
long nsel = 0;
if (cur_sheet()->items() == 0)
{
beep();
return 0l;
}
if (to == 0l)
to = cur_sheet()->row(cur_sheet()->items() - 1).get_long(1);
if (from == 0l)
from = cur_sheet()->row(0).get_long(1);
if (from > to)
{
long tmp = to;
to = from;
from = tmp;
}
bool go = FALSE;
bool cod1ok = FALSE, cod2ok = FALSE;
long last = 0l;
long firs = 0l;
for (long i = 0; i < cur_sheet()->items(); i++)
{
TToken_string& tt = cur_sheet()->row(i);
long cod = tt.get_long(1);
if (cod >= from && cod <= to)
{
cur_sheet()->check(i);
nsel ++;
if (firs == 0l) firs = cod;
last = cod;
}
else cur_sheet()->uncheck(i);
if (cod == from) cod1ok = TRUE;
if (cod == to) cod2ok = TRUE;
}
if (!cod1ok) from = firs;
if (!cod2ok) to = last;
m.set(F_CFCODFR, from);
m.set(F_CFCODTO, to);
m.set(F_NSEL, nsel);
return 0l;
}
void TStampaEC_application::reset_sheets(TMask& m)
{
_cli_sh_k1->uncheck(-1);
_cli_sh_k2->uncheck(-1);
_for_sh_k1->uncheck(-1);
_for_sh_k2->uncheck(-1);
m.set(F_CFCODFR,"");
m.set(F_CFCODTO,"");
}
bool TStampaEC_application::select_ec()
{
TMask m("sc2100a");
KEY k;
m.set_handler(R_CLIFO, rclifo_handler);
m.set_handler(R_SORTCF, rsortcf_handler);
m.set_handler(B_CFCODFR, bfrom_handler);
m.set_handler(B_CFCODTO, bto_handler);
m.set_handler(B_SELECT, bselect_handler);
m.set_handler(B_RESET, breset_handler);
m.set_handler(F_CFCODFR, ffrom_handler);
m.set_handler(F_CFCODTO, fto_handler);
if (_ditta->good())
{
m.set(F_COMSEND, _ditta->lfile(LF_COMUNI).get("COM"));
m.set(F_LUOGOSEND, _ditta->lfile(LF_COMUNI).get("DENCOM"));
}
while ((k = m.run()) != K_ESC)
if (k == K_ENTER)
print_selected();
return k != K_ESC;
}
void TStampaEC_application::set_clifo_limits(TMask& m)
{
long first = 0, last = 0;
bool primo = FALSE;
for (int i = 0; i < cur_sheet()->items(); i++)
{
if (cur_sheet()->checked(i))
{
TToken_string& t = cur_sheet()->row(i);
long kod = t.get_long(1);
if (!primo++) first = last = kod;
if (first > kod) first = kod;
if (last < kod) last = kod;
}
}
m.set(F_CFCODFR, first);
m.set(F_CFCODTO, last);
}
bool TStampaEC_application::print_selected()
{
for (int i = 0; i < cur_sheet()->items(); i++)
{
if (cur_sheet()->checked(i))
{
TToken_string& t = cur_sheet()->row(i);
print_ec(t.get_long(1));
}
}
return TRUE;
}
bool TStampaEC_application::print_ec(long clifo)
{
return TRUE;
}
TCursor_sheet* TStampaEC_application::cur_sheet()
{
if (_key == 1) return (_what == clienti ? _cli_sh_k1 : _for_sh_k1);
else return (_what == clienti ? _cli_sh_k2 : _for_sh_k2);
}
bool TStampaEC_application::create()
{
TApplication::create();
// crea relazioni, cursori e cursor_sheets
_clifo_rel = new TRelation(LF_CLIFO);
_cli_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 1);
_cli_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 2);
_for_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 1);
_for_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 2);
_cli_sh_k1 = new TCursor_sheet(_cli_cur_k1, " |CODCF|RAGSOC", "Selezione clienti per codice",
"@1|Codice|Ragione Sociale@50");
_cli_sh_k2 = new TCursor_sheet(_cli_cur_k2, " |RAGSOC|CODCF", "Selezione clienti per ragione sociale",
"@1|Ragione Sociale@50|Codice");
_for_sh_k1 = new TCursor_sheet(_for_cur_k1, " |CODCF|RAGSOC", "Selezione fornitori per codice",
"@1|Codice|Ragione Sociale@50");
_for_sh_k2 = new TCursor_sheet(_for_cur_k2, " |RAGSOC|CODCF", "Selezione fornitori per ragione sociale",
"@1|Ragione Sociale@50|Codice");
// relasiun per la ditta defiga
_ditta = new TRelation(LF_NDITTE);
_ditta->add(LF_ANAG, "TIPOA==TIPOA|CODANAGR==CODANAGR");
_ditta->add(LF_COMUNI, "COM==COMRF(COMRES)", 1, LF_ANAG);
_ditta->zero();
_ditta->lfile().put("CODDITTA", get_firm());
_ditta->read();
dispatch_e_menu(MENU_ITEM(1));
return TRUE;
}
bool TStampaEC_application::destroy()
{
delete _for_sh_k2;
delete _for_sh_k1;
delete _cli_sh_k2;
delete _cli_sh_k1;
delete _for_cur_k2;
delete _for_cur_k1;
delete _cli_cur_k2;
delete _cli_cur_k1;
delete _clifo_rel;
return TApplication::destroy();
}
bool TStampaEC_application::menu(MENU_TAG m)
{
if (m == MENU_ITEM(1))
return select_ec();
else return TApplication::menu(m);
}
TStampaEC_application::TStampaEC_application() : _selected(10000), _what(clienti), _key(1)
{
}
int sc2100(int argc, char** argv)
{
TStampaEC_application app;
app.run(argc, argv, "Stampa Estratti Conto");
return 0;
}

23
sc/sc2100a.h Executable file
View File

@ -0,0 +1,23 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_CODPROF 103
#define F_DESPROF 104
#define D_DATALIMOP 105
#define D_DATALIMSC 106
#define F_GIORISCH 107
#define B_STAMPCHIU 108
#define D_DATACHIU 109
#define F_LUOGOSEND 110
#define D_DATASEND 111
#define R_CLIFO 112
#define F_CFCODFR 113
#define F_CFCODTO 114
#define B_CFCODFR 115
#define B_CFCODTO 116
#define F_CFDESFR 117
#define F_CFDESTO 118
#define B_SELECT 119
#define B_RESET 120
#define R_SORTCF 121
#define F_NSEL 122
#define F_COMSEND 123

198
sc/sc2100a.uml Executable file
View File

@ -0,0 +1,198 @@
#include "sc2100a.h"
PAGE "Stampa estratti conto" -1 -1 68 17
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Cod. "
FLAGS "DFR"
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50 46
BEGIN
PROMPT 13 1 "R.S. "
FLAGS "D"
END
GROUPBOX DLG_NULL 68 8
BEGIN
PROMPT 0 7 ""
END
STRING F_CODPROF 5
BEGIN
PROMPT 1 8 "Codice profilo "
USE LF_FORM KEY 1
DISPLAY "Codice" CODPROF
DISPLAY "Descrizione@50" DESC
INPUT CODPROF F_CODPROF
OUTPUT F_CODPROF CODPROF
OUTPUT F_DESPROF DESC
HELP ""
FLAGS ""
END
STRING F_DESPROF 50 30
BEGIN
PROMPT 34 8 " "
HELP ""
FLAGS "D"
END
DATE D_DATALIMOP
BEGIN
PROMPT 1 9 "Data limite operazione "
HELP ""
FLAGS "A"
CHECKTYPE REQUIRED
END
DATE D_DATALIMSC
BEGIN
PROMPT 1 10 "Data limite scaduto "
HELP ""
FLAGS ""
CHECKTYPE REQUIRED
END
NUMBER F_GIORISCH 3
BEGIN
PROMPT 1 11 "Giorni calcolo rischio "
HELP ""
FLAGS ""
END
BOOLEAN B_STAMPCHIU
BEGIN
PROMPT 1 12 "Stampa partite chiuse"
MESSAGE TRUE ENABLE,D_DATACHIU
MESSAGE FALSE DISABLE,D_DATACHIU
HELP ""
FLAGS ""
END
DATE D_DATACHIU
BEGIN
PROMPT 25 12 "dal "
HELP ""
FLAGS ""
END
STRING F_COMSEND 5
BEGIN
PROMPT 1 13 "Luogo d'invio "
USE LF_COMUNI KEY 1
INPUT COM F_COMSEND
INPUT DENCOM F_LUOGOSEND
DISPLAY "Codice" COM
DISPLAY "Descrizione@50" DENCOM
OUTPUT F_COMSEND COM
OUTPUT F_LUOGOSEND DENCOM
// CHECKTYPE NORMAL
END
STRING F_LUOGOSEND 50 20
BEGIN
PROMPT 24 13 ""
USE LF_COMUNI KEY 2
INPUT DENCOM F_LUOGOSEND
INPUT COM F_COMSEND
DISPLAY "Descrizione@50" DENCOM
DISPLAY "Codice" COM
OUTPUT F_COMSEND COM
OUTPUT F_LUOGOSEND DENCOM
// CHECKTYPE NORMAL
END
DATE D_DATASEND
BEGIN
PROMPT 50 13 "data "
HELP ""
FLAGS "A"
CHECKTYPE REQUIRED
END
BUTTON B_SELECT 10 1
BEGIN
PROMPT 51 3 "~Selezione"
HELP ""
FLAGS ""
END
BUTTON B_RESET 10 1
BEGIN
PROMPT 51 4 "~Azzera"
HELP ""
FLAGS ""
END
RADIOBUTTON R_CLIFO 20
BEGIN
PROMPT 1 2 "Selezione"
ITEM "1|Clienti"
ITEM "2|Fornitori"
HELP ""
FLAGS ""
END
RADIOBUTTON R_SORTCF 20
BEGIN
PROMPT 25 2 "Ordinamento"
ITEM "1|Per codice"
ITEM "2|Per ragione sociale"
HELP ""
FLAGS ""
END
NUMBER F_CFCODFR 5
BEGIN
PROMPT 1 6 "Da codice "
HELP ""
FLAGS ""
END
NUMBER F_CFCODTO 5
BEGIN
PROMPT 36 6 "a codice "
HELP ""
FLAGS ""
END
NUMBER F_NSEL 3
BEGIN
PROMPT 56 6 "N. "
FLAGS "D"
END
BUTTON B_CFCODFR 2 1
BEGIN
PROMPT 31 6 ""
PICTURE 109
END
BUTTON B_CFCODTO 2 1
BEGIN
PROMPT 51 6 ""
PICTURE 109
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK