Aggiunto scadenzario (ancora incompleto, senza registrazione) alla primanota

git-svn-id: svn://10.65.10.50/trunk@317 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1994-10-05 11:38:32 +00:00
parent e1ec4c3f2b
commit 1009bd1f41
33 changed files with 2572 additions and 1147 deletions

View File

@ -1,9 +1,9 @@
#define F_ABI 101
#define F_CAB 102
#define F_DATA 103
#define F_TIPO 104
#define F_ANNO 105
#define F_MESE 106
#define F_AGGIORNA 107
#define F_DISTINTA 108
#define F_PROVA 109
#define F_ABI 101
#define F_CAB 102
#define F_DATA 103
#define F_TIPO 104
#define F_ANNO 105
#define F_MESE 106
#define F_AGGIORNA 107
#define F_DISTINTA 108
#define F_PROVA 109

View File

@ -1,49 +1,49 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
SUBMENU BAR_ITEM(1) "~Sezione"
MENU BAR_ITEM(1)
ITEM MENU_ITEM(1) "~Header"
ITEM MENU_ITEM(2) "~Body"
ITEM MENU_ITEM(3) "~Footer"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
SUBMENU BAR_ITEM(1) "~Sezione"
MENU BAR_ITEM(1)
ITEM MENU_ITEM(1) "~Header"
ITEM MENU_ITEM(2) "~Body"
ITEM MENU_ITEM(3) "~Footer"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Selezione"

View File

@ -1,46 +1,46 @@
#include "cg1100.h"
PAGE "" -1 -1 49 12
DATE F_DATA_STAMPA
BEGIN
PROMPT 2 1 "Data di stampa "
FLAGS "A"
END
RADIOBUTTON F_SCELTA_STAMPA 42
BEGIN
PROMPT 2 2 "Tipo di stampa "
HELP "Scegliere il tipo di stampa desiderata"
ITEM "1|Completa"
ITEM "2|Conti riclassificati per IV direttiva"
ITEM "3|Conti non collegati IV direttiva"
ITEM "4|Conti collegati analisi di bilancio"
ITEM "5|Conti non collegati analisi di bilancio"
END
BOOLEAN F_SALTO_PAGINA
BEGIN
PROMPT 3 9 "Salto pagina per cambio gruppo "
HELP "Indicare se si desidera un salto pagina ogni volta che cambia il gruppo"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg1100.h"
PAGE "" -1 -1 49 12
DATE F_DATA_STAMPA
BEGIN
PROMPT 2 1 "Data di stampa "
FLAGS "A"
END
RADIOBUTTON F_SCELTA_STAMPA 42
BEGIN
PROMPT 2 2 "Tipo di stampa "
HELP "Scegliere il tipo di stampa desiderata"
ITEM "1|Completa"
ITEM "2|Conti riclassificati per IV direttiva"
ITEM "3|Conti non collegati IV direttiva"
ITEM "4|Conti collegati analisi di bilancio"
ITEM "5|Conti non collegati analisi di bilancio"
END
BOOLEAN F_SALTO_PAGINA
BEGIN
PROMPT 3 9 "Salto pagina per cambio gruppo "
HELP "Indicare se si desidera un salto pagina ogni volta che cambia il gruppo"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,9 +1,9 @@
#define F_ABI 101
#define F_CAB 102
#define F_DATA 103
#define F_TIPO 104
#define F_ANNO 105
#define F_MESE 106
#define F_AGGIORNA 107
#define F_DISTINTA 108
#define F_PROVA 109
#define F_ABI 101
#define F_CAB 102
#define F_DATA 103
#define F_TIPO 104
#define F_ANNO 105
#define F_MESE 106
#define F_AGGIORNA 107
#define F_DISTINTA 108
#define F_PROVA 109

View File

@ -1,18 +1,16 @@
#include <xvt.h>
#include "cg2.h"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch(n)
{
case 1:
cg2200(argc, argv); break;
default:
cg2100(argc,argv); break;
}
return 0;
}
#include <xvt.h>
#include "cg2.h"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch(n)
{
case 1:
cg2200(argc, argv); break;
default:
cg2100(argc,argv); break;
}
return 0;
}

View File

@ -5,4 +5,3 @@ int cg2100(int argc, char** argv);
int cg2200(int argc, char** argv);
#endif // __CG2_H

View File

@ -1,8 +1,8 @@
#include <config.h>
#include <execp.h>
#include <tabutil.h>
#include <utility.h>
#include <urldefid.h>
#include <execp.h>
#include "cg2100.h"
#include "cg2102.h"
@ -158,13 +158,6 @@ bool TPrimanota_application::user_destroy()
return TRUE;
}
void TPrimanota_application::print()
{
TExternal_app stampa("cg3 -0");
stampa.run();
}
// Legge la causale di codice cod ed il relativo registro dell'anno year
// Certified 99%
bool TPrimanota_application::read_caus(const char* cod, int year)
@ -187,6 +180,12 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
return ok;
}
void TPrimanota_application::print()
{
TExternal_app stampa("cg3 -0");
stampa.run();
}
bool TPrimanota_application::changing_mask(int mode)
{
@ -196,6 +195,7 @@ bool TPrimanota_application::changing_mask(int mode)
_iva = nessuna_iva;
TString16 causale;
// TString16 registro;
int annoes = 0, annoiva = 0;
switch (mode)
@ -211,6 +211,9 @@ bool TPrimanota_application::changing_mask(int mode)
annoiva = _rel->lfile().get_int("ANNOIVA");
causale = _rel->lfile().get("CODCAUS");
giornale().read(annoes);
// registro = _rel->lfile()->get("REG");
// _causale.read(causale, 0);
// _causale.reg().read(registro, annoiva);
read_caus(causale, annoiva);
break;
default:
@ -256,7 +259,7 @@ void TPrimanota_application::init_mask(TMask& m)
else
{
forg = 'h';
clig = causale().corrispettivi() ? 'h' : 's';
clig = causale().reg().corrispettivi() ? 'h' : 's';
}
m.send_key(K_SHIFT+K_CTRL+clig, -1); // group 1 (clienti)
m.send_key(K_SHIFT+K_CTRL+forg, -2); // group 2 (fornitori)
@ -282,7 +285,6 @@ void TPrimanota_application::init_mask(TMask& m)
void TPrimanota_application::init_query_mode(TMask& m)
{
enable_menu_item(M_FILE_PRINT);
m.enable(DLG_NEWREC);
}
@ -325,8 +327,7 @@ void TPrimanota_application::init_insert_mode(TMask& m)
_saldi.set_movap(_causale.apertura());
_saldi.set_anno_es(m.get_int(F_ANNOES));
_saldi.set_num_ulmov(m.get_long(F_NUMREG));
const TDate datareg(m.get(F_DATAREG));
_saldi.set_data_ulmov(datareg);
_saldi.set_data_ulmov(TDate(m.get(F_DATAREG)));
if (_iva != nessuna_iva)
{
@ -366,8 +367,7 @@ void TPrimanota_application::init_insert_mode(TMask& m)
if (iva() == nessuna_iva)
{
const int n = set_cgs_row(-1,zero,tc,desc,' ');
cgs().disable_cell(n, sezione == 'D' ? 1 : 0);
set_cgs_row(-1,zero,tc,desc,' ');
}
else
{
@ -608,7 +608,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
}
if (_iva == nessuna_iva) return;
if (causale().corrispettivi())
if (causale().reg().corrispettivi())
{
TRectype& rec = _rel->lfile().curr();
rec.put("TIPO", "");
@ -697,6 +697,8 @@ int TPrimanota_application::write(const TMask& m)
const TString16 causimm(_causale.causale_inc_imm());
if (causimm.not_empty())
genera_incasso(causimm);
if (TRUE) // TBI controlla pagamento da scadenzare
aggiorna_scadenzario(m);
}
return err;
}
@ -708,6 +710,9 @@ int TPrimanota_application::rewrite(const TMask& m)
const int err = _rel->rewrite(TRUE);
if (err == NOERR)
_saldi.registra();
if (TRUE) // TBI controlla pagamento da scadenzare e/o variazione che ne implichi
// la modifica
aggiorna_scadenzario(m);
return err;
}

View File

@ -1,188 +1,188 @@
#include "cg2100.h"
PAGE "Movimento di incasso immediato" -1 -1 78 12
NUMBER F_NUMREG 6
BEGIN
PROMPT 1 1 "Operazione n. "
FIELD LF_MOV->NUMREG
CHECKTYPE REQUIRED
FLAGS "D"
KEY 1
END
DATE F_DATAREG
BEGIN
PROMPT 43 1 "Data di registrazione "
FIELD LF_MOV->DATAREG
CHECKTYPE REQUIRED
END
NUMBER F_NUMDOC 6
BEGIN
PROMPT 1 2 "Documento n. "
FIELD LF_MOV->NUMDOC
END
DATE F_DATACOMP
BEGIN
PROMPT 43 2 "Data di competenza "
FIELD LF_MOV->DATACOMP
CHECKTYPE REQUIRED
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 1 3 "Esercizio "
FIELD LF_MOV->ANNOES
FLAGS "D"
END
STRING F_TIPODOC 2
BEGIN
PROMPT 27 3 "Tipo documento "
FIELD LF_MOV->TIPODOC
FLAGS "D"
END
DATE F_DATADOC
BEGIN
PROMPT 43 3 "Data del documento "
FIELD LF_MOV->DATADOC
CHECKTYPE REQUIRED
END
STRING F_DESCR 50 50
BEGIN
PROMPT 1 4 "Descrizione documento "
FIELD LF_MOV->DESCR
END
STRING F_CODCAUS 3
BEGIN
PROMPT 1 5 "Causale "
FIELD LF_MOV->CODCAUS
USE LF_CAUSALI
INPUT CODCAUS F_CODCAUS
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TIPODOC
OUTPUT F_CODCAUS CODCAUS
OUTPUT F_DESCRCAUS DESCR
OUTPUT F_TIPODOC TIPODOC
FLAGS "D"
END
STRING F_DESCRCAUS 50
BEGIN
PROMPT 25 5 ""
FLAGS "D"
END
LIST F_CLIFO 1
BEGIN
PROMPT 0 7 ""
ITEM "C|Cliente" MESSAGE HIDE,2@|SHOW,1@
ITEM "F|Fornitore" MESSAGE HIDE,1@|SHOW,2@
FIELD LF_MOV->TIPO
FLAGS "GH"
END
NUMBER F_CLIENTE 5
BEGIN
PROMPT 1 7 "Cliente "
FIELD LF_MOV->CODCF
GROUP 1
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_CLIENTE CODCF
OUTPUT F_RAGSOCCLIENTE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_FORNITORE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
NUMBER F_FORNITORE 5
BEGIN
PROMPT 1 7 "Fornitore "
FIELD LF_MOV->CODCF
GROUP 2
USE LF_CLIFO KEY 1
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_FORNITORE CODCF
OUTPUT F_RAGSOCFORNITORE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_CLIENTE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
STRING F_RAGSOCFORNITORE 50
BEGIN
PROMPT 25 7 ""
GROUP 2
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_RAGSOCFORNITORE
COPY DISPLAY F_FORNITORE
COPY OUTPUT F_FORNITORE
END
STRING F_RAGSOCCLIENTE 50
BEGIN
PROMPT 25 7 ""
GROUP 1
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLIENTE
COPY DISPLAY F_CLIENTE
COPY OUTPUT F_CLIENTE
ADD RUN cg0 -1
END
NUMBER F_GRUPPOCLIFO 3
BEGIN
PROMPT 1 8 "Gruppo "
LF_MOV->GRUPPO
END
NUMBER F_CONTOCLIFO 3
BEGIN
PROMPT 16 8 "Conto "
LF_MOV->CONTO
END
NUMBER F_TOTALE 14
BEGIN
PROMPT 1 9 "Totale documento "
FIELD LF_MOV->TOTDOC
PICTURE "."
CHECKTYPE REQUIRED
END
BUTTON DLG_SAVEREC 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg2100.h"
PAGE "Movimento di incasso immediato" -1 -1 78 12
NUMBER F_NUMREG 6
BEGIN
PROMPT 1 1 "Operazione n. "
FIELD LF_MOV->NUMREG
CHECKTYPE REQUIRED
FLAGS "D"
KEY 1
END
DATE F_DATAREG
BEGIN
PROMPT 43 1 "Data di registrazione "
FIELD LF_MOV->DATAREG
CHECKTYPE REQUIRED
END
NUMBER F_NUMDOC 6
BEGIN
PROMPT 1 2 "Documento n. "
FIELD LF_MOV->NUMDOC
END
DATE F_DATACOMP
BEGIN
PROMPT 43 2 "Data di competenza "
FIELD LF_MOV->DATACOMP
CHECKTYPE REQUIRED
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 1 3 "Esercizio "
FIELD LF_MOV->ANNOES
FLAGS "D"
END
STRING F_TIPODOC 2
BEGIN
PROMPT 27 3 "Tipo documento "
FIELD LF_MOV->TIPODOC
FLAGS "D"
END
DATE F_DATADOC
BEGIN
PROMPT 43 3 "Data del documento "
FIELD LF_MOV->DATADOC
CHECKTYPE REQUIRED
END
STRING F_DESCR 50 50
BEGIN
PROMPT 1 4 "Descrizione documento "
FIELD LF_MOV->DESCR
END
STRING F_CODCAUS 3
BEGIN
PROMPT 1 5 "Causale "
FIELD LF_MOV->CODCAUS
USE LF_CAUSALI
INPUT CODCAUS F_CODCAUS
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TIPODOC
OUTPUT F_CODCAUS CODCAUS
OUTPUT F_DESCRCAUS DESCR
OUTPUT F_TIPODOC TIPODOC
FLAGS "D"
END
STRING F_DESCRCAUS 50
BEGIN
PROMPT 25 5 ""
FLAGS "D"
END
LIST F_CLIFO 1
BEGIN
PROMPT 0 7 ""
ITEM "C|Cliente" MESSAGE HIDE,2@|SHOW,1@
ITEM "F|Fornitore" MESSAGE HIDE,1@|SHOW,2@
FIELD LF_MOV->TIPO
FLAGS "GH"
END
NUMBER F_CLIENTE 5
BEGIN
PROMPT 1 7 "Cliente "
FIELD LF_MOV->CODCF
GROUP 1
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_CLIENTE CODCF
OUTPUT F_RAGSOCCLIENTE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_FORNITORE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
NUMBER F_FORNITORE 5
BEGIN
PROMPT 1 7 "Fornitore "
FIELD LF_MOV->CODCF
GROUP 2
USE LF_CLIFO KEY 1
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_FORNITORE CODCF
OUTPUT F_RAGSOCFORNITORE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_CLIENTE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
STRING F_RAGSOCFORNITORE 50
BEGIN
PROMPT 25 7 ""
GROUP 2
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_RAGSOCFORNITORE
COPY DISPLAY F_FORNITORE
COPY OUTPUT F_FORNITORE
END
STRING F_RAGSOCCLIENTE 50
BEGIN
PROMPT 25 7 ""
GROUP 1
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLIENTE
COPY DISPLAY F_CLIENTE
COPY OUTPUT F_CLIENTE
ADD RUN cg0 -1
END
NUMBER F_GRUPPOCLIFO 3
BEGIN
PROMPT 1 8 "Gruppo "
LF_MOV->GRUPPO
END
NUMBER F_CONTOCLIFO 3
BEGIN
PROMPT 16 8 "Conto "
LF_MOV->CONTO
END
NUMBER F_TOTALE 14
BEGIN
PROMPT 1 9 "Totale documento "
FIELD LF_MOV->TOTDOC
PICTURE "."
CHECKTYPE REQUIRED
END
BUTTON DLG_SAVEREC 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -47,6 +47,8 @@ class TPrimanota_application : public TRelation_application
long _lastreg; // Numero ultima registrazione
int _mode; // Modo maschera corrente
void* _app_data;
static bool suspended_handler(TMask_field& f, KEY k);
static bool num_handler(TMask_field& f, KEY key);
static bool caus_query_handler(TMask_field& f, KEY key);
@ -76,6 +78,8 @@ class TPrimanota_application : public TRelation_application
static bool iva_handler(TMask_field& f, KEY key);
static bool cg_notify(int r, KEY key);
static bool cg_handler(TMask_field& f, KEY key);
static bool pag_notify(int r, KEY key);
protected:
virtual bool user_create();
@ -94,7 +98,8 @@ protected:
virtual bool remove();
void genera_incasso(const char* causimm);
void aggiorna_scadenzario(const TMask& m);
TMask* load_mask(int n);
TMask& occas_mask() { return *load_mask(3); }
@ -149,7 +154,10 @@ 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_rit(bool fisc);
void add_cgs_rit(bool fisc);
void* get_app_data() { return _app_data; }
void set_app_data(void* v) { _app_data = v; }
public:
TPrimanota_application();

220
cg/cg2104.cpp Executable file
View File

@ -0,0 +1,220 @@
// --------------------------------------------------------------------------
// Scadenzario
// fv 24/8/94
// --------------------------------------------------------------------------
#include "cg2102.h"
#include "cg2100.h"
#include "cg2104a.h"
#include "pagament.h"
struct shuttle {
Pagamento* _pag; // pagamento
TSheet_field* _sheet; // sheet
TMask* _mask; // maschera
TArray* _rows; // righe spreadsheet nella versione originale
};
bool TPrimanota_application::pag_notify(int r, KEY k)
{
// questo e' il bello
shuttle* sh = (shuttle*)(((TPrimanota_application*)MainApp())->get_app_data());
Pagamento* pag = sh->_pag;
TSheet_field* ps = sh->_sheet;
TMask* msk = sh->_mask;
TArray* rws = sh->_rows;
int rdiff = atoi(msk->get(F_RDIFFER));
// ts contiene la vecchia riga, ns la nuova
TToken_string ts(36), ns(36);
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;
TString news(15), newi(15), newp(15), newt(2);
bool recalc = msk->get_bool(F_RECALC);
bool mcomm = msk->get_bool(F_MCOMM);
switch (k)
{
case K_SPACE:
break;
case K_ENTER:
ns = ps->row(r);
ts = (TToken_string&)(*rws)[r];
news = ns.get(0);
newp = ns.get(1);
newi = ns.get(2);
newt = ns.get(3);
// qui viene il bello, si fa per dire
if (strcmp(ts.get(0),news) != 0) // modificata data scadenza
{
mod = m_scad = TRUE;
}
if (strcmp(ts.get(1),newp) != 0) // modificata percentuale
{
mod = m_perc = TRUE;
}
if (strcmp(ts.get(2),newi) != 0) // modificato importo
{
if ((recalc && !m_perc) || (!recalc)) // se si modifica la percentuale l'importo non viene cagato
{
mod = m_imp = TRUE;
}
}
if (strcmp(ts.get(3),newt) != 0) // modificato tipo pagamento
{
mod = m_tipo = TRUE;
}
break;
case K_DEL:
case K_INS:
doit = FALSE;
break;
default:
break;
}
// settato da recalc_rate se occorre ridefinire lo sheet
// aggiungendo o togliendo righe
bool need_recalc = FALSE;
if (k == K_ENTER)
{
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
msk->field(F_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 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) // any error?
// rimetti le righe com'erano prima
{
beep();
// se gli errori sono voluti, spiegali
if (!recalc)
{
TString s(256);
pag->strerr(ahiahi,s);
warning_box(s);
}
ps->row(r) = (TToken_string&)(*rws)[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();
}
}
return doit;
}
void TPrimanota_application::aggiorna_scadenzario(const TMask& m)
{
real imponibile(0.0);
real imposta(0.0);
real spese(0.0);
TString dt(m.get(F_DATAREG));
Pagamento pag(m.get(F_CODPAG), (const char*)dt);
if (pag.is_new()) return;
TMask ms("cg2104a");
TSheet_field& ps = (TSheet_field&)ms.field(F_RATESHEET);
ps.set_notify(pag_notify);
ms.field(F_RDIFFER).set(pag.rate_differenziate() ? "1" : "2");
ms.field(F_NAMEPAG).set(pag.name());
ms.field(F_TIPOPR).set(pag.desc_tpr());
ms.field(F_MCOMM).set(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));
imponibile += mpo;
imposta += imp;
// TBI: le spese che cazzo sono?
// -----------------------------
}
ms.field(F_IMPONIBILE).set(imponibile.string());
ms.field(F_IMPOSTA).set(imposta.string());
ms.field(F_SPESE).set(spese.string());
ms.field(F_RECALC).set("X");
pag.set_total(imponibile, imposta, spese);
// TBI TBI TBI TBI TBI TBI TBI TBI TBI
// controllare se c'e' una rateazione non standard gia' registrata
// in tal caso occorre zappare e settare le rate a mano
pag.set_rate_auto();
// 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);
}
// prepara lo sheet
pag.set_sheet(ps);
TArray rows(ps.rows_array());
shuttle sh;
sh._pag = &pag;
sh._sheet = &ps;
sh._mask = &ms;
sh._rows = &rows;
set_app_data(&sh);
ms.run();
// TBI se modificato riaggiustare i files
// chiamando la write del caso
// -------------------------------------------------
}

10
cg/cg2104a.h Executable file
View File

@ -0,0 +1,10 @@
#define F_RATESHEET 101
#define F_TOTAL 102
#define F_RDIFFER 103
#define F_IMPONIBILE 104
#define F_IMPOSTA 105
#define F_SPESE 106
#define F_RECALC 107
#define F_NAMEPAG 108
#define F_TIPOPR 109
#define F_MCOMM 110

135
cg/cg2104a.uml Executable file
View File

@ -0,0 +1,135 @@
#include "cg2104a.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Registrazione Scadenze" -1 -1 77 20
GROUPBOX DLG_NULL 79 3
BEGIN
PROMPT 0 1 "@bScadenzario"
END
STRING F_IMPONIBILE 14
BEGIN
PROMPT 2 2 "Imponibile "
FLAGS "D"
END
STRING F_IMPOSTA 14
BEGIN
PROMPT 29 2 "Imposta "
FLAGS "D"
END
STRING F_SPESE 14
BEGIN
PROMPT 53 2 "Spese "
FLAGS "D"
END
RADIOBUTTON F_RDIFFER 31
BEGIN
PROMPT 1 4 "Opzioni ricalcolo rate"
ITEM "1|Differenziate"
ITEM "2|Uguali"
ITEM "3|Uguali dall'ultima modificata"
ITEM "4|Uguali finche' possibile"
END
BOOLEAN F_RECALC
BEGIN
PROMPT 53 5 "Ricalcolo automatico"
MESSAGE TRUE ENABLE,F_RDIFFER|ENABLE,F_MCOMM
MESSAGE FALSE DISABLE,F_RDIFFER|DISABLE,F_MCOMM
END
BOOLEAN F_MCOMM
BEGIN
PROMPT 53 6 "Mese commerciale"
END
STRING F_NAMEPAG 27
BEGIN
PROMPT 36 7 "Pagamento "
FLAGS "D"
END
STRING F_TIPOPR 27
BEGIN
PROMPT 36 8 "Tipo prima rata "
FLAGS "D"
END
SPREADSHEET F_RATESHEET 80 8
BEGIN
PROMPT 1 10 "Rate"
ITEM "Scadenza@10"
ITEM "Percentuale@12"
ITEM "Importo@15"
ITEM "Tipo"
ITEM "Pagamento@32"
END
ENDPAGE
ENDMASK
PAGE "Rata pagamento" -1 -1 50 7
DATE 101
BEGIN
PROMPT 1 2 "Scadenza "
END
NUMBER 102 3 0
BEGIN
PROMPT 1 3 "Percentuale "
END
NUMBER 103 15 0
BEGIN
PROMPT 1 4 "Importo "
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"
END
STRING 105 36
BEGIN
PROMPT 22 6 ""
FLAGS "D"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,65 +1,65 @@
#include "cg2200.h"
PAGE "Eliminazione Movimenti Provvisori" -1 -1 42 9
GROUPBOX DLG_NULL 40 3
BEGIN
PROMPT 1 1 "Dal movimento"
END
DATE F_FROMDATE
BEGIN
PROMPT 2 2 "Data "
USE LF_MOV KEY 2 SELECT PROVVIS="P"
INPUT DATAREG F_FROMDATE
INPUT NUMREG F_FROMREG
DISPLAY "Data@10" DATAREG
DISPLAY "Numero@6" NUMREG
DISPLAY "Causale" CODCAUS
DISPLAY "Documento" NUMDOC
DISPLAY "Descrizione@50" DESCR
OUTPUT F_FROMDATE DATAREG
OUTPUT F_FROMREG NUMREG
CHECKTYPE NORMAL
END
NUMBER F_FROMREG 5
BEGIN
PROMPT 22 2 "Operazione "
FLAGS "DR"
END
GROUPBOX DLG_NULL 40 3
BEGIN
PROMPT 1 4 "Al movimento"
END
DATE F_TODATE
BEGIN
PROMPT 2 5 "Data "
COPY USE F_FROMDATE
INPUT DATAREG F_TODATE
INPUT NUMREG F_TOREG
COPY DISPLAY F_FROMDATE
OUTPUT F_TODATE DATAREG
OUTPUT F_TOREG NUMREG
CHECKTYPE NORMAL
END
NUMBER F_TOREG 5
BEGIN
PROMPT 22 5 "Operazione "
FLAGS "DR"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
#include "cg2200.h"
PAGE "Eliminazione Movimenti Provvisori" -1 -1 42 9
GROUPBOX DLG_NULL 40 3
BEGIN
PROMPT 1 1 "Dal movimento"
END
DATE F_FROMDATE
BEGIN
PROMPT 2 2 "Data "
USE LF_MOV KEY 2 SELECT PROVVIS="P"
INPUT DATAREG F_FROMDATE
INPUT NUMREG F_FROMREG
DISPLAY "Data@10" DATAREG
DISPLAY "Numero@6" NUMREG
DISPLAY "Causale" CODCAUS
DISPLAY "Documento" NUMDOC
DISPLAY "Descrizione@50" DESCR
OUTPUT F_FROMDATE DATAREG
OUTPUT F_FROMREG NUMREG
CHECKTYPE NORMAL
END
NUMBER F_FROMREG 5
BEGIN
PROMPT 22 2 "Operazione "
FLAGS "DR"
END
GROUPBOX DLG_NULL 40 3
BEGIN
PROMPT 1 4 "Al movimento"
END
DATE F_TODATE
BEGIN
PROMPT 2 5 "Data "
COPY USE F_FROMDATE
INPUT DATAREG F_TODATE
INPUT NUMREG F_TOREG
COPY DISPLAY F_FROMDATE
OUTPUT F_TODATE DATAREG
OUTPUT F_TOREG NUMREG
CHECKTYPE NORMAL
END
NUMBER F_TOREG 5
BEGIN
PROMPT 22 5 "Operazione "
FLAGS "DR"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE

View File

@ -1,45 +1,45 @@
#include <default.url>
/* cg4 -0 Calcolo movimenti e saldi */
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Movimenti"
ITEM BAR_ITEM(2) "~Saldi"
/* cg4 -2 Calcolo liquidazione IVA */
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Liquidazione"
ITEM BAR_ITEM(2) "~Deleghe"
ITEM BAR_ITEM(3) "~Acconto"
/* cg4 -3 Stampa registri IVA */
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Scelta parametri"
/* cg4 -4 Apertura nuovo esercizio/nuovo esercizio IVA */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Apertura nuovo esercizio"
ITEM BAR_ITEM(2) "Apertura nuovo esercizio ~IVA"
/* cg4 -5 Chiusura Apertura Conti */
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Chiusura Apertura Conti"
#include <default.url>
/* cg4 -0 Calcolo movimenti e saldi */
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Movimenti"
ITEM BAR_ITEM(2) "~Saldi"
/* cg4 -2 Calcolo liquidazione IVA */
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Liquidazione"
ITEM BAR_ITEM(2) "~Deleghe"
ITEM BAR_ITEM(3) "~Acconto"
/* cg4 -3 Stampa registri IVA */
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Scelta parametri"
/* cg4 -4 Apertura nuovo esercizio/nuovo esercizio IVA */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Apertura nuovo esercizio"
ITEM BAR_ITEM(2) "Apertura nuovo esercizio ~IVA"
/* cg4 -5 Chiusura Apertura Conti */
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Chiusura Apertura Conti"

View File

@ -1,40 +1,40 @@
#define FLD_CG41_YEAR 100
PAGE "Riordino Movimenti/Saldi" -1 -1 47 10
TEXT DLG_NULL
BEGIN
PROMPT 16 1 "ATTENZIONE"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "Il riordino degli archivi puo' richiedere"
END
TEXT DLG_NULL
BEGIN
PROMPT 3 4 "tempo. Siate certi di voler proseguire."
END
NUMBER FLD_CG41_YEAR 4
BEGIN
PROMPT 3 6 "Anno da riordinare "
FLAGS "A"
HELP "Inserire l'anno relativamente al quale si desidera il riordino degli archivi"
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -12 -1 "Annulla"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -22 -1 "Conferma"
END
ENDPAGE
ENDMASK
#define FLD_CG41_YEAR 100
PAGE "Riordino Movimenti/Saldi" -1 -1 47 10
TEXT DLG_NULL
BEGIN
PROMPT 16 1 "ATTENZIONE"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "Il riordino degli archivi puo' richiedere"
END
TEXT DLG_NULL
BEGIN
PROMPT 3 4 "tempo. Siate certi di voler proseguire."
END
NUMBER FLD_CG41_YEAR 4
BEGIN
PROMPT 3 6 "Anno da riordinare "
FLAGS "A"
HELP "Inserire l'anno relativamente al quale si desidera il riordino degli archivi"
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -12 -1 "Annulla"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -22 -1 "Conferma"
END
ENDPAGE
ENDMASK

View File

@ -1,147 +1,147 @@
#include "cg4300a.h"
PAGE "Calcolo Liquidazioni" -1 -1 68 15
RADIOBUTTON CG43_RDB_VERS 15
BEGIN
PROMPT 4 1 "Versamenti"
ITEM "1|Tutti"
MESSAGE HIDE,CG43_LST_TRIM|SHOW,CG43_LST_MESE
ITEM "2|Mensili"
MESSAGE HIDE,CG43_LST_TRIM|SHOW,CG43_LST_MESE
ITEM "3|Trimestrali"
MESSAGE SHOW,CG43_LST_TRIM|HIDE,CG43_LST_MESE
END
GROUPBOX DLG_NULL 40 5
BEGIN
PROMPT 23 1 "Scelta ditte"
END
NUMBER CG43_FLD_DFR 6
BEGIN
PROMPT 24 2 "Da codice "
HELP "Immettere codice ditta di partenza per la selezione"
USE LF_NDITTE KEY 1
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale " RAGSOC
DISPLAY "Vers" FREQVIVA
OUTPUT CG43_FLD_DFR CODDITTA
END
NUMBER CG43_FLD_DTO 6
BEGIN
PROMPT 24 3 "A codice "
HELP "Immettere codice ditta di fine selezione"
COPY USE CG43_FLD_DFR
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale " RAGSOC
DISPLAY "Vers" FREQVIVA
OUTPUT CG43_FLD_DTO CODDITTA
END
STRING CG43_FLD_SELECTED 6
BEGIN
PROMPT 24 4 "Scelte n. "
FLAGS "D"
END
BUTTON DLG_SELECT 8
BEGIN
PROMPT 50 2 "Selezione"
MESSAGE EXIT, DLG_SELECT
END
BUTTON CG43_BUT_ANN 8
BEGIN
PROMPT 50 3 "Annulla"
MESSAGE EXIT,CG43_BUT_ANN
END
BUTTON CG43_BUT_CHK 8
BEGIN
PROMPT 50 4 "Verifica"
MESSAGE EXIT,CG43_BUT_CHK
END
NUMBER CG43_FLD_ANNO 4
BEGIN
PROMPT 30 7 "Anno "
HELP "Immettere l'anno di calcolo"
FLAGS "A"
END
LIST CG43_LST_MESE 10
BEGIN
PROMPT 4 7 "Periodo "
HELP "Immettere il mese di calcolo liquidazione"
ITEM "13|Annuale"
FLAGS "AM"
END
LIST CG43_LST_TRIM 12
BEGIN
PROMPT 4 7 "Periodo "
HELP "Immettere il trimestre di calcolo liquidazione"
ITEM "3|1 Trimestre "
ITEM "6|2 Trimestre "
ITEM "9|3 Trimestre "
ITEM "12|4 Tr./Annuale"
ITEM "13|Controllo 13a"
END
LIST CG43_LST_CALC 13
BEGIN
PROMPT 4 8 "Ricalcola "
ITEM "1|Se necessario"
ITEM "2|Mese corrente"
ITEM "3|Tutti i mesi"
ITEM "4|Non calcolare"
END
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 4 10 "Stampa"
END
BOOLEAN CG43_CHK_STAMPA
BEGIN
PROMPT 5 11 "Esegui "
HELP "Se selezionato, stampa il prospetto delle liquidazioni"
MESSAGE TRUE ENABLE,CG43_FLD_DATA
MESSAGE FALSE DISABLE,CG43_FLD_DATA
END
DATE CG43_FLD_DATA
BEGIN
PROMPT 16 11 "con data "
HELP "Immettere la data di stampa"
FLAGS "A"
END
BOOLEAN CG43_CHK_FINAL
BEGIN
PROMPT 47 11 "Definitivo"
HELP "Se selezionato, la liquidazione e' registrata come definitiva"
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg4300a.h"
PAGE "Calcolo Liquidazioni" -1 -1 68 15
RADIOBUTTON CG43_RDB_VERS 15
BEGIN
PROMPT 4 1 "Versamenti"
ITEM "1|Tutti"
MESSAGE HIDE,CG43_LST_TRIM|SHOW,CG43_LST_MESE
ITEM "2|Mensili"
MESSAGE HIDE,CG43_LST_TRIM|SHOW,CG43_LST_MESE
ITEM "3|Trimestrali"
MESSAGE SHOW,CG43_LST_TRIM|HIDE,CG43_LST_MESE
END
GROUPBOX DLG_NULL 40 5
BEGIN
PROMPT 23 1 "Scelta ditte"
END
NUMBER CG43_FLD_DFR 6
BEGIN
PROMPT 24 2 "Da codice "
HELP "Immettere codice ditta di partenza per la selezione"
USE LF_NDITTE KEY 1
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale " RAGSOC
DISPLAY "Vers" FREQVIVA
OUTPUT CG43_FLD_DFR CODDITTA
END
NUMBER CG43_FLD_DTO 6
BEGIN
PROMPT 24 3 "A codice "
HELP "Immettere codice ditta di fine selezione"
COPY USE CG43_FLD_DFR
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale " RAGSOC
DISPLAY "Vers" FREQVIVA
OUTPUT CG43_FLD_DTO CODDITTA
END
STRING CG43_FLD_SELECTED 6
BEGIN
PROMPT 24 4 "Scelte n. "
FLAGS "D"
END
BUTTON DLG_SELECT 8
BEGIN
PROMPT 50 2 "Selezione"
MESSAGE EXIT, DLG_SELECT
END
BUTTON CG43_BUT_ANN 8
BEGIN
PROMPT 50 3 "Annulla"
MESSAGE EXIT,CG43_BUT_ANN
END
BUTTON CG43_BUT_CHK 8
BEGIN
PROMPT 50 4 "Verifica"
MESSAGE EXIT,CG43_BUT_CHK
END
NUMBER CG43_FLD_ANNO 4
BEGIN
PROMPT 30 7 "Anno "
HELP "Immettere l'anno di calcolo"
FLAGS "A"
END
LIST CG43_LST_MESE 10
BEGIN
PROMPT 4 7 "Periodo "
HELP "Immettere il mese di calcolo liquidazione"
ITEM "13|Annuale"
FLAGS "AM"
END
LIST CG43_LST_TRIM 12
BEGIN
PROMPT 4 7 "Periodo "
HELP "Immettere il trimestre di calcolo liquidazione"
ITEM "3|1 Trimestre "
ITEM "6|2 Trimestre "
ITEM "9|3 Trimestre "
ITEM "12|4 Tr./Annuale"
ITEM "13|Controllo 13a"
END
LIST CG43_LST_CALC 13
BEGIN
PROMPT 4 8 "Ricalcola "
ITEM "1|Se necessario"
ITEM "2|Mese corrente"
ITEM "3|Tutti i mesi"
ITEM "4|Non calcolare"
END
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 4 10 "Stampa"
END
BOOLEAN CG43_CHK_STAMPA
BEGIN
PROMPT 5 11 "Esegui "
HELP "Se selezionato, stampa il prospetto delle liquidazioni"
MESSAGE TRUE ENABLE,CG43_FLD_DATA
MESSAGE FALSE DISABLE,CG43_FLD_DATA
END
DATE CG43_FLD_DATA
BEGIN
PROMPT 16 11 "con data "
HELP "Immettere la data di stampa"
FLAGS "A"
END
BOOLEAN CG43_CHK_FINAL
BEGIN
PROMPT 47 11 "Definitivo"
HELP "Se selezionato, la liquidazione e' registrata come definitiva"
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,3 +1,3 @@
#define FLD_CGB_YEAR 101
#define FLD_CGB_MONTH 102
#define BUT_CGB_ALL 103
#define FLD_CGB_YEAR 101
#define FLD_CGB_MONTH 102
#define BUT_CGB_ALL 103

View File

@ -1,47 +1,47 @@
#include "cg4300b.h"
PAGE "Estrazione deleghe" -1 -1 45 9
NUMBER FLD_CGB_YEAR 4
BEGIN
PROMPT 2 1 "Anno estrazione "
FLAGS "A"
END
LIST FLD_CGB_MONTH 10
BEGIN
PROMPT 2 2 "Mese estrazione "
FLAGS "AM"
ITEM "13|Annuale"
END
GROUPBOX DLG_NULL 41 4
BEGIN
PROMPT 2 4 "Scelta ditte"
END
BUTTON DLG_SELECT 9 2
BEGIN
PROMPT -12 5 "Scegli"
MESSAGE EXIT,DLG_SELECT
END
BUTTON BUT_CGB_ALL 9 2
BEGIN
PROMPT -22 5 "Tutte"
MESSAGE EXIT,BUT_CGB_ALL
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg4300b.h"
PAGE "Estrazione deleghe" -1 -1 45 9
NUMBER FLD_CGB_YEAR 4
BEGIN
PROMPT 2 1 "Anno estrazione "
FLAGS "A"
END
LIST FLD_CGB_MONTH 10
BEGIN
PROMPT 2 2 "Mese estrazione "
FLAGS "AM"
ITEM "13|Annuale"
END
GROUPBOX DLG_NULL 41 4
BEGIN
PROMPT 2 4 "Scelta ditte"
END
BUTTON DLG_SELECT 9 2
BEGIN
PROMPT -12 5 "Scegli"
MESSAGE EXIT,DLG_SELECT
END
BUTTON BUT_CGB_ALL 9 2
BEGIN
PROMPT -22 5 "Tutte"
MESSAGE EXIT,BUT_CGB_ALL
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,6 +1,6 @@
#define BUT_CGC_SEL 102
#define BUT_CGC_ALL 103
#define FLD_CGC_YEAR 104
#define CHK_CGC_PRINT 105
#define CHK_CGC_BASE 106
#define RDB_CGC_BASE 107
#define BUT_CGC_SEL 102
#define BUT_CGC_ALL 103
#define FLD_CGC_YEAR 104
#define CHK_CGC_PRINT 105
#define CHK_CGC_BASE 106
#define RDB_CGC_BASE 107

View File

@ -1,63 +1,63 @@
#include "cg4300c.h"
PAGE "Calcolo acconto" -1 -1 52 11
RADIOBUTTON RDB_CGC_BASE 4 21
BEGIN
PROMPT 3 1 "Base di calcolo"
ITEM "1|Anno precedente"
ITEM "2|Anno in corso"
END
BOOLEAN CHK_CGC_PRINT
BEGIN
PROMPT 27 2 "Stampa prospetto"
HELP "Questo campo puo' assumere solamente i valori vero e falso"
MESSAGE TRUE ENABLE,CHK_CGC_BASE
MESSAGE FALSE DISABLE,CHK_CGC_BASE
END
BOOLEAN CHK_CGC_BASE
BEGIN
PROMPT 27 3 "Stampa base di calcolo"
HELP "Questo campo puo' assumere solamente i valori vero e falso"
END
NUMBER FLD_CGC_YEAR 4
BEGIN
PROMPT 3 5 "Anno da elaborare "
FLAGS "A"
END
GROUPBOX DLG_NULL 46 4
BEGIN
PROMPT 3 6 "Scelta ditte"
END
BUTTON DLG_SELECT 9 2
BEGIN
PROMPT -12 7 "Scegli"
MESSAGE EXIT,DLG_SELECT
END
BUTTON BUT_CGC_ALL 9 2
BEGIN
PROMPT -22 7 "Tutte"
MESSAGE EXIT,BUT_CGC_ALL
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg4300c.h"
PAGE "Calcolo acconto" -1 -1 52 11
RADIOBUTTON RDB_CGC_BASE 4 21
BEGIN
PROMPT 3 1 "Base di calcolo"
ITEM "1|Anno precedente"
ITEM "2|Anno in corso"
END
BOOLEAN CHK_CGC_PRINT
BEGIN
PROMPT 27 2 "Stampa prospetto"
HELP "Questo campo puo' assumere solamente i valori vero e falso"
MESSAGE TRUE ENABLE,CHK_CGC_BASE
MESSAGE FALSE DISABLE,CHK_CGC_BASE
END
BOOLEAN CHK_CGC_BASE
BEGIN
PROMPT 27 3 "Stampa base di calcolo"
HELP "Questo campo puo' assumere solamente i valori vero e falso"
END
NUMBER FLD_CGC_YEAR 4
BEGIN
PROMPT 3 5 "Anno da elaborare "
FLAGS "A"
END
GROUPBOX DLG_NULL 46 4
BEGIN
PROMPT 3 6 "Scelta ditte"
END
BUTTON DLG_SELECT 9 2
BEGIN
PROMPT -12 7 "Scegli"
MESSAGE EXIT,DLG_SELECT
END
BUTTON BUT_CGC_ALL 9 2
BEGIN
PROMPT -22 7 "Tutte"
MESSAGE EXIT,BUT_CGC_ALL
END
BUTTON DLG_OK 8 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 7 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,31 +1,31 @@
#ifndef __CG4500_H
#define __CG4500_H
#define F_CODDITTA 101
#define F_DATASTAMPA 102
#define F_RAGSOC 103
#define F_APERTURA 104
#define F_ANNO 105
#define F_NUOVOANNO 106
#define F_DATAINI 107
#define F_DATAFIN 108
#define F_ANNOIVA 109
#define F_FREQUENZA 110
#endif // __CG4500_H
#ifndef __CG4500_H
#define __CG4500_H
#define F_CODDITTA 101
#define F_DATASTAMPA 102
#define F_RAGSOC 103
#define F_APERTURA 104
#define F_ANNO 105
#define F_NUOVOANNO 106
#define F_DATAINI 107
#define F_DATAFIN 108
#define F_ANNOIVA 109
#define F_FREQUENZA 110
#endif // __CG4500_H

View File

@ -1,9 +1,9 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_APERTURA 103
#define F_ANNO 104
#define F_DATAINIC 105
#define F_DATAFINC 106
#define F_NUOVOANNO 107
#define F_DATAINI 108
#define F_DATAFIN 109
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_APERTURA 103
#define F_ANNO 104
#define F_DATAINIC 105
#define F_DATAFINC 106
#define F_NUOVOANNO 107
#define F_DATAINI 108
#define F_DATAFIN 109

View File

@ -1,81 +1,81 @@
#include "cg4500a.h"
PAGE "" -1 -1 74 14
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 1 2 "Ragione sociale "
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno esercizio prec. "
FLAGS "D"
END
DATE F_DATAINIC
BEGIN
PROMPT 1 4 "Data inizio es. prec. "
FLAGS "D"
END
DATE F_DATAFINC
BEGIN
PROMPT 1 5 "Data fine es. prec. "
FLAGS "D"
END
NUMBER F_NUOVOANNO 4
BEGIN
PROMPT 1 7 "Nuovo anno esercizio "
CHECKTYPE REQUIRED
END
DATE F_DATAINI
BEGIN
PROMPT 1 8 "Data inizio nuovo esercizio "
CHECKTYPE REQUIRED
END
DATE F_DATAFIN
BEGIN
PROMPT 1 9 "Data fine nuovo esercizio "
WARNING "Inserire una data non inferiore alla data di inizio del nuovo esercizio"
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC >= F_DATAINI
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg4500a.h"
PAGE "" -1 -1 74 14
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 1 2 "Ragione sociale "
FLAGS "D"
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno esercizio prec. "
FLAGS "D"
END
DATE F_DATAINIC
BEGIN
PROMPT 1 4 "Data inizio es. prec. "
FLAGS "D"
END
DATE F_DATAFINC
BEGIN
PROMPT 1 5 "Data fine es. prec. "
FLAGS "D"
END
NUMBER F_NUOVOANNO 4
BEGIN
PROMPT 1 7 "Nuovo anno esercizio "
CHECKTYPE REQUIRED
END
DATE F_DATAINI
BEGIN
PROMPT 1 8 "Data inizio nuovo esercizio "
CHECKTYPE REQUIRED
END
DATE F_DATAFIN
BEGIN
PROMPT 1 9 "Data fine nuovo esercizio "
WARNING "Inserire una data non inferiore alla data di inizio del nuovo esercizio"
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC >= F_DATAINI
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,7 +1,7 @@
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNOIVA 103
#define F_FREQUENZA 104
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ANNOIVA 103
#define F_FREQUENZA 104

View File

@ -1,55 +1,55 @@
#include "cg4500b.h"
PAGE "" -1 -1 73 10
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 2 "Ragione sociale "
FLAGS "D"
END
NUMBER F_ANNOIVA 4
BEGIN
PROMPT 2 4 "Nuovo anno esercizio IVA "
CHECKTYPE REQUIRED
//FLAGS "A"
END
STRING F_FREQUENZA 1
BEGIN
PROMPT 2 5 "Frequenza versamenti (M/T) "
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "cg4500b.h"
PAGE "" -1 -1 73 10
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "FRD"
USE LF_NDITTE KEY 1
CHECKTYPE REQUIRED
INPUT CODDITTA F_CODDITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale @50" RAGSOC
OUTPUT F_CODDITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
END
STRING F_RAGSOC 50
BEGIN
PROMPT 2 2 "Ragione sociale "
FLAGS "D"
END
NUMBER F_ANNOIVA 4
BEGIN
PROMPT 2 4 "Nuovo anno esercizio IVA "
CHECKTYPE REQUIRED
//FLAGS "A"
END
STRING F_FREQUENZA 1
BEGIN
PROMPT 2 5 "Frequenza versamenti (M/T) "
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,19 +1,19 @@
#include <xvt.h>
#include <checks.h>
#include "cg5.h"
#define usage "Error - usage : %s -{0,1}"
int main(int argc,char** argv)
{
int n = (argc > 1) ? atoi(argv[1]+1) : -1;
switch (n)
{
case 0: cg5000(argc,argv) ; break;
case 1: cg5100(argc,argv) ; break;
default: fatal_box(usage, argv[0]) ;
}
return 0;
}
#include <xvt.h>
#include <checks.h>
#include "cg5.h"
#define usage "Error - usage : %s -{0,1}"
int main(int argc,char** argv)
{
int n = (argc > 1) ? atoi(argv[1]+1) : -1;
switch (n)
{
case 0: cg5000(argc,argv) ; break;
case 1: cg5100(argc,argv) ; break;
default: fatal_box(usage, argv[0]) ;
}
return 0;
}

View File

@ -1,2 +1,2 @@
extern int cg5000 (int argc, char* argv[]);
extern int cg5100 (int argc, char* argv[]);
extern int cg5000 (int argc, char* argv[]);
extern int cg5100 (int argc, char* argv[]);

View File

@ -1,21 +1,21 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"

View File

@ -1,98 +1,98 @@
// TRigaiva_array
// Tabella per il calcolo degli imponibili Iva
#include <array.h>
#include <real.h>
#include <strings.h>
#include "cglib03.h"
bool TRigaiva_array::add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const real& imponibilep, const real& impostap)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TRigaiva& r = (TRigaiva&)(*this)[i];
if ((r._codiva==codiva) && (tipodet==r._tipodet))
{
found = TRUE;
r._imponibile += imponibile;
r._imposta += imposta;
r._imponibilep += imponibilep;
r._impostap += impostap;
}
}
if (!found)
{
TRigaiva* r = new TRigaiva(imponibile,imposta,codiva,tipodet,imponibilep,impostap);
add(r);
}
return found;
}
bool TRiga_array::add_riga(const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TRiga& r = (TRiga&)(*this)[i];
if (r._codiva==codiva)
{
found = TRUE;
r._imponibile += imponibile;
r._imposta += imposta;
r._imponibilep += imponibilep;
r._impostap += impostap;
}
}
if (!found)
{
TRiga* r = new TRiga(imponibile,imposta,codiva,imponibilep,impostap);
add(r);
}
return found;
}
bool TDociva_array::add_riga(const char* _descrdociva, const real& _importo,const int _natdoc)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TDociva& r = (TDociva&)(*this)[i];
if (r._descrdoc==_descrdociva)
{
found = TRUE;
if ((r._ndoc == 1)||(r._ndoc == 2)||(r._ndoc == 3)||(r._ndoc == 4))
r._totdociva += _importo;
}
}
if (!found)
{
if ((_natdoc == 1)||(_natdoc == 2)||(_natdoc == 3)||(_natdoc == 4))
{
TDociva* r = new TDociva(_descrdociva,_importo,_natdoc);
add(r);
}
}
return found;
}
bool TTipodoc_array::add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TTipodoc& r = (TTipodoc&)(*this)[i];
if (r._tipodoc==tipodoc)
{
found = TRUE;
r._totdoc += totdoc;
}
}
if (!found)
{
TTipodoc* r = new TTipodoc(tipodoc,descrdoc,totdoc);
add(r);
}
return found;
}
// TRigaiva_array
// Tabella per il calcolo degli imponibili Iva
#include <array.h>
#include <real.h>
#include <strings.h>
#include "cglib03.h"
bool TRigaiva_array::add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const real& imponibilep, const real& impostap)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TRigaiva& r = (TRigaiva&)(*this)[i];
if ((r._codiva==codiva) && (tipodet==r._tipodet))
{
found = TRUE;
r._imponibile += imponibile;
r._imposta += imposta;
r._imponibilep += imponibilep;
r._impostap += impostap;
}
}
if (!found)
{
TRigaiva* r = new TRigaiva(imponibile,imposta,codiva,tipodet,imponibilep,impostap);
add(r);
}
return found;
}
bool TRiga_array::add_riga(const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TRiga& r = (TRiga&)(*this)[i];
if (r._codiva==codiva)
{
found = TRUE;
r._imponibile += imponibile;
r._imposta += imposta;
r._imponibilep += imponibilep;
r._impostap += impostap;
}
}
if (!found)
{
TRiga* r = new TRiga(imponibile,imposta,codiva,imponibilep,impostap);
add(r);
}
return found;
}
bool TDociva_array::add_riga(const char* _descrdociva, const real& _importo,const int _natdoc)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TDociva& r = (TDociva&)(*this)[i];
if (r._descrdoc==_descrdociva)
{
found = TRUE;
if ((r._ndoc == 1)||(r._ndoc == 2)||(r._ndoc == 3)||(r._ndoc == 4))
r._totdociva += _importo;
}
}
if (!found)
{
if ((_natdoc == 1)||(_natdoc == 2)||(_natdoc == 3)||(_natdoc == 4))
{
TDociva* r = new TDociva(_descrdociva,_importo,_natdoc);
add(r);
}
}
return found;
}
bool TTipodoc_array::add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc)
{
bool found = FALSE;
for (int i = 0; i < items(); i++)
{
TTipodoc& r = (TTipodoc&)(*this)[i];
if (r._tipodoc==tipodoc)
{
found = TRUE;
r._totdoc += totdoc;
}
}
if (!found)
{
TTipodoc* r = new TTipodoc(tipodoc,descrdoc,totdoc);
add(r);
}
return found;
}

View File

@ -1,75 +1,75 @@
// cglib03.h
// TRigaiva_array
// Tabella per il calcolo degli imponibili Iva
#ifndef __CGLIB03_H
#define __CGLIB03_H
#include <array.h>
#include <real.h>
#include <strings.h>
struct TDociva : public TObject
{
TString _descrdoc;
real _totdociva;
int _ndoc;
TDociva(const char* _descrdociva, const real& _importo,const int _natdoc):_descrdoc(_descrdociva),_totdociva(_importo),_ndoc(_natdoc)
{}
};
class TDociva_array : public TArray
{
public:
bool add_riga(const char* _descrdociva,const real& _importo,const int _natdoc);
};
struct TRigaiva : public TObject
{
real _imponibile, _imposta, _imponibilep, _impostap; //imponibili, imposte del periodo e progressivi
TString _codiva;
int _tipodet;
TRigaiva (const real& imponibile, const real& imposta, const char* codiva, int tipodet, const real& imponibilep, const real& impostap):
_imponibile(imponibile),_imposta(imposta),_codiva(codiva),_tipodet(tipodet),_imponibilep(imponibilep),_impostap(impostap)
{}
};
class TRigaiva_array : public TArray
{
public:
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const real& imponibilep, const real& impostap);
};
struct TTipodoc : public TObject
{
TString _tipodoc, _descrdoc;
real _totdoc;
TTipodoc (const char* tipodoc, const char* descrdoc, const real& totdoc):
_tipodoc(tipodoc),_descrdoc(descrdoc),_totdoc(totdoc) {}
};
class TTipodoc_array : public TArray
{
public:
bool add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc);
};
struct TRiga : public TObject
{
real _imponibile, _imposta, _imponibilep, _impostap;
TString _codiva;
TRiga (const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap):
_imponibile(imponibile),_imposta(imposta),_codiva(codiva),_imponibilep(imponibilep),_impostap(impostap) {}
};
class TRiga_array : public TArray
{
public:
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap);
};
#endif
// cglib03.h
// TRigaiva_array
// Tabella per il calcolo degli imponibili Iva
#ifndef __CGLIB03_H
#define __CGLIB03_H
#include <array.h>
#include <real.h>
#include <strings.h>
struct TDociva : public TObject
{
TString _descrdoc;
real _totdociva;
int _ndoc;
TDociva(const char* _descrdociva, const real& _importo,const int _natdoc):_descrdoc(_descrdociva),_totdociva(_importo),_ndoc(_natdoc)
{}
};
class TDociva_array : public TArray
{
public:
bool add_riga(const char* _descrdociva,const real& _importo,const int _natdoc);
};
struct TRigaiva : public TObject
{
real _imponibile, _imposta, _imponibilep, _impostap; //imponibili, imposte del periodo e progressivi
TString _codiva;
int _tipodet;
TRigaiva (const real& imponibile, const real& imposta, const char* codiva, int tipodet, const real& imponibilep, const real& impostap):
_imponibile(imponibile),_imposta(imposta),_codiva(codiva),_tipodet(tipodet),_imponibilep(imponibilep),_impostap(impostap)
{}
};
class TRigaiva_array : public TArray
{
public:
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const int tipodet, const real& imponibilep, const real& impostap);
};
struct TTipodoc : public TObject
{
TString _tipodoc, _descrdoc;
real _totdoc;
TTipodoc (const char* tipodoc, const char* descrdoc, const real& totdoc):
_tipodoc(tipodoc),_descrdoc(descrdoc),_totdoc(totdoc) {}
};
class TTipodoc_array : public TArray
{
public:
bool add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc);
};
struct TRiga : public TObject
{
real _imponibile, _imposta, _imponibilep, _impostap;
TString _codiva;
TRiga (const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap):
_imponibile(imponibile),_imposta(imposta),_codiva(codiva),_imponibilep(imponibilep),_impostap(impostap) {}
};
class TRiga_array : public TArray
{
public:
bool add_riga(const real& imponibile, const real& imposta, const char* codiva, const real& imponibilep, const real& impostap);
};
#endif

906
cg/pagament.cpp Executable file
View File

@ -0,0 +1,906 @@
#include "pagament.h"
#include <utility.h>
int Pagamento::_rata_ifield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
return t.get_int(f);
}
real Pagamento::_rata_rfield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
return real(t.get(f));
}
TDate Pagamento::_rata_dfield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
return TDate(t.get(f));
}
const char* Pagamento::_rata_sfield(int n, int f) const
{
static char kak[6];
TToken_string& t = (TToken_string&)_rate[n];
strcpy(kak,t.get(f));
return kak;
}
void Pagamento::set_intervallo_rate(int in)
{
_dirty = TRUE;
if (_mcomm && (in % 30) != 0)
_mcomm = FALSE;
for (int i = 0; i < n_rate(); i++)
{
TToken_string& ts = rata(i);
ts.add(i == 0 ? "0" : format("%d",in), 0);
}
}
void Pagamento::set_mese_commerciale(bool v, int& sscad)
{
_dirty = FALSE;
if (_mcomm == v) return;
if (sscad == -1) sscad = 30;
if ((sscad % 30) != 0) sscad = 30 * ((sscad/30)+1);
set_intervallo_rate(sscad);
_mcomm = v;
}
void Pagamento::set_rate_differenziate(int v)
{
_dirty = FALSE;
if (!_rdiff && v == 2) return;
if (v == 2 && (100 % n_rate()) == 0)
{
int p = 100 / n_rate();
for (int i = _tpr == 0 ? 0 : 1; i < n_rate(); i++)
{
TToken_string& tt = rata(i);
tt.add(p,1);
}
_rdiff = !(v == 2);
_dirty = TRUE;
}
}
void Pagamento::set_tipo_prima_rata(int v, int sscad)
{
_dirty = FALSE;
if (_tpr == v) return;
if (v == 0 && _tpr > 0)
{
for (int i = n_rate() - 1; i > 0; i--)
{
TToken_string& tt = rata(i);
tt.add(scad_rata(i-1),0);
tt.add(tipo_rata(i-1),2);
tt.add(ulc_rata(i-1),5);
}
_rate.add(NULL,0);
_rate.pack();
}
else if ( _tpr == 0 && v > 0)
{
TToken_string* ttn = new TToken_string(32);
ttn->add(0,0);
ttn->add(0,1);
ttn->add(1,2);
ttn->add("",3);
ttn->add("",4);
ttn->add("",5);
_rate.insert(ttn,0);
for (int i = 0; i < (n_rate()-1); i++)
{
TToken_string& tt = rata(i);
{
tt.add(scad_rata(i+1),0);
tt.add(tipo_rata(i+1),2);
tt.add(ulc_rata(i+1),5);
}
}
}
_tpr = v;
_dirty = TRUE;
}
void Pagamento::set_numero_rate(int n, int sscad)
{
_dirty = FALSE;
if (n == 0 || n == n_rate()) return;
int p = 100 / n;
int nr = n_rate();
int first = _tpr == 0 ? 0 : 1;
for (int i = first, sum = 0; sum < 100; i++)
{
if ((100 - sum) < p) p = 100 - sum;
sum += p;
set_rata(i, real(p),
i == 0 ? 0 :
(sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad),
(i < nr ? tipo_rata(i) : tipo_rata(nr-1)));
}
_dirty = TRUE;
}
void Pagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
{
if (mcomm)
{
int nm = scad / 30;
int ny = nm / 12;
nm %= 12;
int newm = d.month() + nm;
if (newm > 12) { newm -= 12; ny++; }
bool last = d.is_end_month() && inizio_scadenza() == 'M';
int dy = d.day();
// la palla del febbraio & c.
if (rata > 1)
{
TDate oldd(data_rata(rata-2));
if (oldd.day() > dy) dy = oldd.day();
}
d.set_day(1); // il giorno 1 ce l'hanno tutti
d.set_month(newm);
d.set_year(d.year()+ny);
d.set_end_month();
if (!last && dy < d.day()) d.set_day(dy);
}
else d += scad;
}
void Pagamento::remove_rata(int i)
{
// non fa nessun ricalcolo, si limita ad impacchettare se
// necessario
_rate.add(NULL,i);
_rate.pack();
_dirty = TRUE;
}
TToken_string& Pagamento::add_rata(real perc, int day, int type)
{
TToken_string* tt = new TToken_string(16);
tt->add(day); // scadenza
tt->add(perc.string()); // percentuale
tt->add(type); // tipo
_rate.add(tt);
_dirty = TRUE;
return *tt;
}
TToken_string& Pagamento::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);
tt->add(day,0); // scadenza
tt->add(perc.string(),1); // percentuale
tt->add(type,2); // tipo
tt->add(data == NULL ? "" : data,3);
tt->add(imp == NULL ? "" : imp,4);
tt->add(ulc == NULL ? "" : ulc,5);
if (!nwr)
{
if (index > _rate.items())
{
error_box("Rate non contigue");
delete tt;
}
}
else
{
_rate.add(tt,index);
_dirty = TRUE;
}
return *tt;
}
void Pagamento::set_imprata(int i, real r)
{
TToken_string& tt = (TToken_string&)_rate[i];
TDate d = _inizio;
for (int n = 0; n <= i; n++)
next_scad(d, scad_rata(n), _mcomm, n);
tt.add((const char*)d, 3);
tt.add(r.string(), 4);
}
word Pagamento::validate() const
{
word res = 0x0000;
real r(0.0);
int first = _tpr == 0 ? 0 : 1;
real toshare(_tpr == 0 ? _firstr : _secndr);
TDistrib ds(toshare,0);
// check percentages & prepare slicer
for (int i = first; i < n_rate(); i++)
{
real p(perc_rata(i));
ds.add(p);
r += p;
}
if (r != real(100.0))
res |= P_RSUM;
if (_inited)
{
ds.init(toshare);
// check importi rate consistenti con la percentuale
for (int i = first; i < n_rate(); i++)
{
real r1(tpay_rata(i));
real r2(ds.get());
if (r1 != r2)
{ res |= P_IMPNC; break; }
}
// check errori date scadenze (se istanziate)
TDate d(data_rata(0));
if (d < _inizio)
res |= P_INIZIO;
for (i = 1; i < n_rate(); i++)
{
if (data_rata(i) <= d)
{ res |= P_SCAD; break; }
d = data_rata(i);
}
}
return res;
}
void Pagamento::strerr(word err, TString& s)
{
s = "Errore:";
if (err & P_RSUM)
s << "\n Le percentuali non sommano a 100";
if (err & P_IMPNC)
s << "\n Le percentuali sono inconsistenti con gli importi";
if (err & P_SCAD)
s << "\n Le scadenze non sono consecutive";
if (err & P_INIZIO)
s << "\n La prima rata e' antecedente alla data movimento";
}
const char* Pagamento::desc_tpr() const
{
const char* o;
switch (_tpr)
{
case 0: o = "Totale su tutte le rate"; break;
case 1: o = "Tutte le imposte su 1a"; break;
case 2: o = "Tutte le spese su 1a"; break;
case 3: o = "Imposte + spese su 1a"; break;
case 4: o = "Spese + merce su 1a"; break;
case 5: o = "Merce + imposte su 1a"; break;
case 6: o = "Tutta la merce su 1a"; break;
}
return o;
}
const char* Pagamento::desc_tipo(int i) const
{
const char* o;
switch (i)
{
case 1: o = "Rimessa diretta / contanti"; break;
case 2: o = "Tratta"; break;
case 3: o = "Ricevuta bancaria"; break;
case 4: o = "Cessione"; break;
case 5: o = "Paghero'"; break;
case 6: o = "Lettera di credito"; break;
case 7: o = "Tratta accettata"; break;
case 8: o = "Altro pagamento"; break;
}
return o;
}
word Pagamento::recalc_rate(int row, bool is_perc_modified,
const char* new_value, const char* scad,
const char* typ, int rdiff, bool mcomm,
bool& need_recalc)
// ricalcola le rate sulla base di parametri modificati sulla riga row
// parametri: tutti i const char* possono essere NULL, il che vuol dire
// che i dati corrispondenti non sono stati modificati;
// se new_value non e' NULL puo' essere la percentuale (e
// allora is_perc_modified e' TRUE) o l'importo. Non e'
// possibile modificare entrambi; se succede viene data
// priorita' alla percentuale.
{
CHECK(!(!is_perc_modified && new_value != NULL && !_inited),
"A'stronzo! E famme 'na pippa! Me dai n'importo che nun ce sta? Ma Vaffanculo!");
if (_rate.items() == 0) return P_OK;
real rsum(0.0), newv(0.0), rmax(0.0);
int oldtype = tipo_rata(0);
int oldscad = scad_rata(0);
TDate lastdate = data_rata(0);
int first = _tpr == 0 ? 0 : 1;
TArray srate(_rate); // rate come erano
if (srate.items() > 1)
{
// calcola defaults per tipo pagamento e scadenza
// nel caso di rate nuove
oldscad = scad_rata(1);
}
if (oldscad == 0) oldscad = 30;
if (oldtype == 0) oldtype = 1;
if (new_value != NULL)
{
newv = new_value;
rmax = is_perc_modified? real(100.0) : (_tpr == 0 ? _firstr : _secndr);
if (newv > rmax) return P_RSUM;
}
bool exhausted = FALSE;
for (int i = first; i < srate.items(); i++)
{
if (i == row)
{
if (typ != NULL)
{
TToken_string& tt = rata(row);
TToken_string& ss = (TToken_string&)srate[row];
tt.add(typ,2);
ss.add(typ,2);
// no error is possible
}
if (scad != NULL)
{
// if !_inited scad e' il n. giorni, se no e' la rata
if (_inited)
{
TToken_string& tt = rata(row);
TToken_string& ss = (TToken_string&)srate[row];
lastdate = scad;
// controlla errore sulla data scadenza
if (i > 0)
{
oldscad = (int)(lastdate - data_rata(i-1));
if (oldscad <= 0l) return P_SCAD;
}
else if (lastdate < _inizio) return P_INIZIO;
tt.add(scad,3);
ss.add(scad,3);
// ricalcola rate successive: se si vuole modificarne solo una
// ci si fotte e si disabilita il ricalcolo
TDate ddd (lastdate);
for (int j = row+1; j < srate.items(); j++)
{
TToken_string& tt = rata(j);
TToken_string& ss = (TToken_string&)srate[j];
next_scad(ddd,scad_rata(j),mcomm,j);
tt.add(ddd.string(),3);
ss.add(ddd.string(),3);
need_recalc = TRUE;
}
}
else
{
// nulla di speciale visto che si memorizza la derivata
int sc = atoi(scad);
if (sc <= 0) return P_SCAD;
if (_mcomm && (sc % 30) != 0) _mcomm = FALSE;
TToken_string& tt = rata(row);
TToken_string& ss = (TToken_string&)srate[row];
tt.add(0,sc);
ss.add(1,sc);
}
}
// here's the bell
if (new_value != NULL)
{
if (newv == ZERO || (rsum+newv) > rmax)
return P_RSUM;
// did not sforate
rsum += newv;
TToken_string& rt = rata(row);
// setta nuovo valore e ricalcola cio' che ne consegue
if (is_perc_modified) rt.add(new_value,1);
else rt.add(new_value,4);
// riaggiusta le rate rimanenti
real remainder(0.0); remainder = rmax - rsum;
if (!(exhausted = (remainder == real(0.0))))
{
// controlla se rdiff e' compatibile con
// i dati e se e' il caso riaggiusta
if (rdiff == 3 && !((remainder % newv.integer()) == ZERO))
rdiff = 2;
if (rdiff == 2 && !((rmax % newv.integer()) == ZERO))
rdiff = 1;
_rdiff = (rdiff == 1 || rdiff == 3 || rdiff == 4);
// procedi
if (rdiff == 1)
{
// cancella tutte le rate successive, aggiungi un'unica rata
// con il resto dell'importo
if (row < (srate.items()-1))
{
TToken_string& trt = rata(row+1);
trt.add(remainder.string(), is_perc_modified ? 1 : 4);
for(int j = row+2; j < srate.items(); j++)
_rate.add(NULL,j);
}
else
{
// l'importante e' esagerare
for(int j = row+1; j < srate.items(); j++)
_rate.add(NULL,j);
TToken_string& trt = add_rata(is_perc_modified? remainder : real(0.0),
oldscad, oldtype);
if (!is_perc_modified) trt.add(remainder.string(),4);
if (_inited)
{
TDate dd = data_rata(row);
next_scad(dd,oldscad,mcomm,row);
trt.add(dd.string(),3);
}
}
}
else // rate non differenziate (dall'inizio o da row)
{
// ripartisci l'importo nel numero necessario di rate per
// mantenere costante il valore
real sum(0.0);
if (_inited) lastdate = data_rata(rdiff == 2 ? first : row);
TDate dd(lastdate);
int type = oldtype;
int nscd = oldscad;
int frs = (rdiff == 3 || rdiff == 4) ? row+1 : first;
real mx = (rdiff == 3 || rdiff == 4) ? remainder : rmax;
// cancelliamo tutto, va'
for (int j = frs; j < srate.items(); j++)
_rate.add(NULL,j);
if (rdiff != 4)
for (j = frs; sum < mx; j++)
{
// se c'e' la vecchia rata si tengono i parametri
// altrimenti si calcolano
if (j < srate.items())
{
TToken_string& trt = (TToken_string&)srate[j];
if (_inited) dd = trt.get(3);
type = atoi(trt.get(2));
nscd = j == 0 ? 0 : atoi(trt.get(0));
if (type == 0) type = 1;
if (j > 0 && nscd == 0) nscd = oldscad;
if (_inited && dd == lastdate && j > 0)
next_scad(dd,nscd,mcomm,j);
}
else if (_inited)
{
if (dd <= botime) dd = lastdate;
next_scad(dd,nscd,mcomm,j);
}
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
nscd, type);
if (_inited)
ttr.add(dd.string(), 3);
if (!is_perc_modified)
ttr.add(newv.string(),4);
sum += newv;
}
else // rdiff == 4; uguali finche' possibile
{
bool basta = FALSE;
for (j = frs; ; j++)
{
// ultima rata puo' differire dalle precedenti
if (mx - sum <= newv)
{
newv = mx - sum;
basta = TRUE;
}
// se c'e' la vecchia rata si tengono i parametri
// altrimenti si calcolano
if (j < srate.items())
{
TToken_string& trt = (TToken_string&)srate[j];
if (_inited) dd = trt.get(3);
type = atoi(trt.get(2));
nscd = j == 0 ? 0 : atoi(trt.get(0));
if (type == 0) type = 1;
if (j > 0 && nscd == 0) nscd = oldscad;
if (_inited && dd == lastdate && j > 0)
next_scad(dd,nscd,mcomm,j);
}
else if (_inited) next_scad(dd,nscd,mcomm,j);
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
nscd, type);
if (_inited)
ttr.add(dd.string(), 3);
if (!is_perc_modified)
ttr.add(newv.string(),4);
if (basta) break;
sum += newv;
}
}
}
}
else // exhausted
{
for(int j = row+1; j < srate.items(); j++)
_rate.add(NULL,j);
}
if (_inited)
{
// ricalcola il valore secondario (non modificato)
real toshare(100.0);
if (is_perc_modified)
toshare = (_tpr == 0 ? _firstr : _secndr);
TDistrib dt(toshare,0);
for (int j = first; j < _rate.items(); j++)
{
real rvl = is_perc_modified ? perc_rata(j) : tpay_rata(j);
real zpx = rvl/rmax; // percentuale
dt.add(zpx);
}
for (j = first; j < _rate.items(); j++)
{
TToken_string& tr = rata(j);
real rvl = dt.get();
tr.add(rvl.string(), is_perc_modified ? 4 : 1);
}
}
need_recalc = TRUE;
return P_OK;
} // new_value != NULL
}
else // i != row modified
{
if (i > 0 && !((perc_rata(i-1) == perc_rata(i))))
{
if (rdiff == 2) rdiff = 1;
_rdiff = FALSE;
}
rsum += is_perc_modified ? perc_rata(i) : tpay_rata(i);
lastdate = data_rata(i);
oldtype = tipo_rata(i);
oldscad = scad_rata(i);
if (_inited && i > 0)
{
if (data_rata(i) <= data_rata(i-1))
return P_SCAD;
}
else if (lastdate < _inizio)
return P_INIZIO;
}
}
return P_OK;
}
bool Pagamento::read(TTable* t, TTable* r)
{
// puo' chiamarla chiunque
bool istnew = FALSE;
if (t == NULL)
{
t = new TTable("%CPG");
istnew = TRUE;
}
t->zero(); t->put("CODTAB",_code);
t->read(); if (t->eof()) return FALSE;
// set everything
_rdiff = t->get_bool("B1");
_mcomm = t->get_bool("B0");
_tpr = *((const char*)(t->get("S3")));
_inscad = *((const char*)(t->get("S1")));
_code = t->get("CODTAB");
_name = t->get("S0");
// TBI aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
if (_inscad == 'M')
{
if (_mcomm) _inizio.set_month(_inizio.month() == 2 ? 28 : 30);
else _inizio.set_end_month();
}
else if (_inscad == 'F' && _mcomm && _inizio.month() == 31)
_inizio.set_month(30);
// leggi rate e scadenze
bool isrnew = FALSE;
if (r == NULL)
{
r = new TTable("%RPG");
isrnew = TRUE;
}
TString s(16);
for (int i = 0; ;i++)
{
r->zero(); s.format("%s%3d",(const char*)_code, i);
r->put("CODTAB", (const char*)s);
if (r->read() != NOERR) break;
TToken_string* tt = new TToken_string(16);
tt->add((const char*)(r->get("I0"))); // scadenza
tt->add((const char*)(r->get("R0"))); // percentuale
tt->add((const char*)(r->get("I1"))); // tipo
// data e importo
TDate d = _inizio;
next_scad(d,(int)(r->get_long("I0")),_mcomm,i);
tt->add((const char*)d);
tt->add("");
tt->add(r->get("S1"));
_slicer.add(real(r->get("R0")));
_rate.add(tt);
}
if (istnew) delete t;
if (isrnew) delete r;
return TRUE;
}
bool Pagamento::write(TTable& r)
{
// Scrive soltanto le righe di pagamento; si assume sia stata chiamata da una
// relapp, che ha scritto il file principale
TString s(16); bool ok = TRUE;
for (int i = 0; i < n_rate(); i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
r.put("I0", (long)scad_rata(i));
r.put("R0", perc_rata(i).string());
r.put("I1", (long)tipo_rata(i));
r.put("S1", ulc_rata(i));
ok &= (r.write() == NOERR);
}
return ok;
}
bool Pagamento::rewrite(TTable& r)
{
TString s(16); bool ok = TRUE;
for (int i = 0; i < n_rate(); i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
bool was = (r.read() == NOERR);
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
r.put("I0", (long)scad_rata(i));
r.put("R0", perc_rata(i).string());
r.put("I1", (long)tipo_rata(i));
r.put("S1", ulc_rata(i));
ok &= ((was ? r.rewrite : r.write()) == NOERR);
}
// erase possible rates > current n. rates
for (;;i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
if (r.read() == NOERR) r.remove();
else break;
}
return ok;
}
void Pagamento::remove(TTable& r)
{
TString s(16);
for (int i = 0 ; ; i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
if (r.read() == NOERR) r.remove();
else break;
}
}
void Pagamento::set_rate_auto()
{
// vedi rate esistenti e tipo prima rata
// deve fare riferimento ad un tipo pagamento esistente
// e sensato
int first = 0;
real toslice = _firstr;
if (n_rate() == 0 || !_inited || (_tpr > 0 && n_rate() == 1)) return;
if (_tpr > 1) // ripartisci _firstr su tutte le rate
{
first = 1;
toslice = _secndr;
}
_slicer.init(toslice);
if (_tpr > 0)
// prima rata obbligatoria
set_imprata(0, _firstr);
for (int i = first; i < n_rate(); i++)
// setta le fette e le date di scadenza
set_imprata(i, _slicer.get());
}
void Pagamento::set_total(real& imponibile, real& imposta, real& spese)
{
_imponibile = imponibile;
_imposta = imposta;
_spese = spese;
_inited = TRUE;
// istanzia _firstr e _secndr a seconda di _tpr
switch(_tpr)
{
case 0:
_firstr = _imponibile + _imposta + _spese;
_secndr = 0.0;
break;
case 1:
_firstr = _imposta;
_secndr = _imponibile + _spese;
break;
case 2:
_firstr = _spese;
_secndr = _imposta + _imponibile;
break;
case 3:
_firstr = _imposta + _spese;
_secndr = _imponibile;
break;
case 4:
_firstr = _spese + _imponibile;
_secndr = _imposta;
break;
case 5:
_firstr = _imponibile + _imposta;
_secndr = _spese;
break;
case 6:
_firstr = _imponibile;
_secndr = _imposta + _spese;
break;
}
for (int i = 0; i < _rate.items(); i++)
{
TToken_string& t = (TToken_string&)_rate[i];
real rr(t.get(1));
_slicer.add(rr);
}
}
void Pagamento::set_sheet(TSheet_field& sf, int sscad)
{
sf.reset();
if (_inited && _rate.items() > 0)
{
// si istanzia uno sheet di primanota
for (int i = 0; i < n_rate(); i++)
{
TToken_string* ts = new TToken_string(36);
// istanzia, o stronzo
ts->add((const char*)data_rata(i));
ts->add(perc_rata(i).string());
ts->add(tpay_rata(i).string());
ts->add(tipo_rata(i));
ts->add(desc_tipo(tipo_rata(i)));
sf.row(-1) = (*ts);
}
}
else if (_rate.items() > 0) // not inited: set edit sheet
{
for (int i = 0, scr = 0; i < n_rate(); i++)
{
TToken_string* s = new TToken_string(32);
scr += scad_rata(i);
s->add(format("%d",scr));
s->add(perc_rata(i).string());
s->add(format("%d",tipo_rata(i)));
s->add(desc_tipo(tipo_rata(i)));
s->add(ulc_rata(i));
sf.row(-1) = *s;
}
}
else // new: set with 1 or 2 rates according to tpr
{
if (_tpr > 0)
set_rata(0, ZERO, sscad == -1 ? 0 : sscad, 1);
set_rata(_tpr == 0 ? 0 : 1, real(100.0), sscad == -1 ? (_tpr == 0 ? 0 :30)
: sscad, 1);
_dirty = TRUE;
for (int i = 0, scr = 0; i < n_rate(); i++)
{
TToken_string* s = new TToken_string(32);
scr += scad_rata(i);
s->add(format("%d",scr));
s->add(perc_rata(i).string());
s->add(format("%d",tipo_rata(i)));
s->add(desc_tipo(tipo_rata(i)));
s->add(ulc_rata(i));
sf.row(-1) = *s;
}
}
if (_tpr > 0)
{
// disabilita campi da non toccare sulla prima rata
if (_inited)
{
sf.disable_cell(0,1); // percentuale
sf.disable_cell(0,2); // importo
}
else
{
sf.disable_cell(0,1); // percentuale
}
}
sf.force_update();
}
Pagamento::Pagamento(const char* codtab, const char* data) :
_slicer(0.0,0), _new(FALSE), _imponibile(0.0), _imposta(0.0),
_spese(0.0), _code(codtab), _dirty(FALSE), _inited(FALSE)
{
if (data != NULL)
_inizio = data;
if (_code.empty() || !read())
_new = TRUE;
if (_new && data != NULL) error_box("Modalita' pagamento inesistente");
}

138
cg/pagament.h Executable file
View File

@ -0,0 +1,138 @@
#ifndef __PAGAMENT_H
#define __PAGAMENT_H
#ifndef __REAL_H
#include <real.h>
#endif
#ifndef __STRINGS_H
#include <string.h>
#endif
#ifndef __DATE_H
#include <date.h>
#endif
#ifndef __MSKSHEET_H
#include <msksheet.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
// Error codes for pagation
const word P_OK = 0x0000; // ok
const word P_RSUM = 0x0001; // percentages do not sum up to 100
const word P_IMPNC = 0x0002; // inconsistenza percentuali / importi
const word P_SCAD = 0x0004; // scadenze non consecutive
const word P_INIZIO = 0x0008; // data 1a rata < data inizio pagamenti
class Pagamento : public TObject
{
TString _code; // codice
TString _name; // descrizione
real _imponibile; // imponibile da affettare
real _imposta; // imposta da affettare
real _spese; // spese da affettare
TDistrib _slicer; // affettatrice
bool _new; // non letto da database
TArray _rate; // rate medesime
char _inscad; // inizio scadenze: S1
bool _mcomm; // mese commerciale: B0
bool _rdiff; // rate differenziate: B1
int _tpr; // tipo prima rata: S3
bool _dirty; // modificato (strutturalmente!)
TDate _inizio; // data inizio pagamenti
bool _inited; // vero se c'e' un movimento di riferimento
real _firstr; // importo da pagare in prima rata (o distribuire se tpr == 0)
real _secndr; // importo da distribuire
int _rata_ifield(int n, int f) const;
real _rata_rfield(int n, int f) const;
TDate _rata_dfield(int n, int f) const;
const char* _rata_sfield(int n, int f) const;
public:
int n_rate() const { return _rate.items(); }
bool is_new() const { return _new; }
bool dirty() const { return _dirty; }
int tipo_rata(int n) const { return _rata_ifield(n,2);}
real perc_rata(int n) const { return _rata_rfield(n,1);}
int scad_rata(int n) const { return _rata_ifield(n,0);}
TDate data_rata(int n) const { return _rata_dfield(n,3);}
real tpay_rata(int n) const { return _rata_rfield(n,4);}
const char* ulc_rata(int n) const { return _rata_sfield(n,5);}
char inizio_scadenza() const { return _inscad; }
bool mese_commerciale() const { return _mcomm; }
bool rate_differenziate() const { return _rdiff; }
int tipo_prima_rata() const { return _tpr; }
const TString& name() const { return _name; }
const TString& code() const { return _code; }
const char* desc_tpr() const;
const char* desc_tipo(int) const;
// queste vengono usate solo per movimenti editabili nella struttura
// (da tabella pagamenti) e riaggiustano tutte le rate in accordo
// con il parametro modificato
void set_intervallo_rate(int i);
void set_mese_commerciale(bool v, int& sscad);
void set_rate_differenziate(int v);
void set_tipo_prima_rata(int v, int sscad = -1);
void set_numero_rate(int n, int sscad = -1);
void set_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; }
// check consistency: returns word with errors flagged, 0 if ok
word validate() const;
void strerr(word err, TString& s);
// read/write from database
// relapp passa i files, se no vengono aperti
bool read(TTable* cpg = NULL, TTable* rpg = NULL);
// chiamabili solo da relapp, agiscono solo su %RPG
bool write(TTable& rpg);
bool rewrite(TTable& rpg);
void remove(TTable& rpg);
// modifica rate manualmente o non
TToken_string& rata(int r) { return (TToken_string&)_rate[r]; }
TToken_string& add_rata (real perc, int day, int type);
TToken_string& set_rata (int index, real perc, int day, int type,
const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL);
void remove_rata(int r);
void zap_rate () { _rate.destroy(); }
// calcola le rate automaticamente secondo quanto specificato
void set_rate_auto();
// data una rata esistente, riaggiusta gli importi usando lo slicer e
// le scadenze usando la data di inizio
void set_imprata(int i, real r);
// slicer interface
void set_total(real& ib, real& im, real& sp);
// istanzia uno sheet field come diobue comanda
void set_sheet(TSheet_field& sf, int sscad = -1);
// ricalcola automaticamente tutto il ricalcolabile
// alla modifica di una percentuale (o di un importo)
// ritorna TRUE se non si poteva; non occorre che sia inizializzato
// con un importo
word recalc_rate(int row, bool is_perc_modified, const char* new_value,
const char* scad, const char* typ, int rdiff,
bool mcomm, bool& need_recalc);
// determina la prossima scadenza
void next_scad(TDate& d, int scad, bool mcomm, int rata);
// se codtab non e' NULL legge da file (e da' errore se non c'e')
// se si vuole fare un pagamento nuovo si da' il codice con set_code
Pagamento(const char* codtab = NULL, const char* data = NULL);
virtual ~Pagamento() {}
};
#endif

View File

@ -12,9 +12,15 @@ EdMask = cg5000a.msk
#codice azienda banca
CodCAB = 1
#codice dipendenza
<<<<<<< prassis.doc
CodABI = 1
# Somma imposte non detraibiili agli acquisti/importazioni in mod. IVA 11
Sind11 = X
=======
CodABI = 1
# Somma imposte non detraibili agli acquist/importazioni in mod. IVA 11
Sind11 = X
>>>>>>> 1.2
# Stampa intestazione su registri bollati
StiReg = X
# Non stampa data registrazione su registi IVA