Gestiono tracciato CBI "arricchito"
git-svn-id: svn://10.65.10.50/branches/R_10_00@23003 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
dc46bc0acc
commit
7877d04c64
@ -6,11 +6,9 @@ int main(int argc, char** argv)
|
||||
const char op = argc < 2 ? '0' : argv[1][1];
|
||||
switch (op)
|
||||
{
|
||||
/*
|
||||
case '1':
|
||||
ef0200(argc,argv);// GENERAZIONE EFFETTI DA E/C (OBSOLETO NON USARE PIU")
|
||||
ef0200(argc,argv);// Tabella Mandati
|
||||
break;
|
||||
*/
|
||||
case '2':
|
||||
ef0300(argc,argv);// AGGIORNAMENTO DISTINTE (DISTINTE DI PRESENTAZIONE)
|
||||
break;
|
||||
|
@ -25,14 +25,17 @@ protected:
|
||||
virtual void init_insert_mode(TMask&);
|
||||
virtual bool get_next_key(TToken_string& key);
|
||||
virtual void init_modify_mode(TMask&);
|
||||
|
||||
static bool clifo_handler(TMask_field& f, KEY k);
|
||||
static bool datascad_handler(TMask_field& f, KEY k);
|
||||
static bool mandato_handler(TMask_field& f, KEY k);
|
||||
static bool handle_sheet(TMask_field& f, KEY);
|
||||
static bool cambio_handler(TMask_field& f, KEY k);
|
||||
static bool codval_handler(TMask_field& f, KEY k);
|
||||
static bool contab_handler(TMask_field& f, KEY k);
|
||||
static bool fatt_handler(TMask_field& f, KEY k);
|
||||
static bool impeff_notify(TSheet_field& s, int r, KEY key);
|
||||
|
||||
TSheet_field& cess_sheet() const;
|
||||
TSheet_field& righe_sheet() const;
|
||||
void common_f(const TMask& m);
|
||||
@ -44,7 +47,7 @@ protected:
|
||||
bool user_create();
|
||||
bool user_destroy();
|
||||
virtual TMask* get_mask(int mode) {return _msk;}
|
||||
virtual bool changing_mask(int mode) {return FALSE;}
|
||||
virtual bool changing_mask(int mode) {return false;}
|
||||
virtual void ini2mask(TConfig& ini, TMask& m, bool query);
|
||||
|
||||
|
||||
@ -117,7 +120,7 @@ bool TVariazione_effetti::get_next_key(TToken_string& key)
|
||||
nprogtr += effetti.get_long(EFF_NPROGTR);
|
||||
}
|
||||
key.format("%d|%ld",F_NPROGTR,nprogtr);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ritorna un riferimento allo sheet dei cessionari
|
||||
@ -150,7 +153,7 @@ void TVariazione_effetti::common_f(const TMask& m)
|
||||
{
|
||||
TToken_string& row = shcess.row(i);
|
||||
if ( row.items()== 0 ) continue; // salta le righe vuote
|
||||
TRectype& rec = _effetto->row_c(ii, TRUE);
|
||||
TRectype& rec = _effetto->row_c(ii, true);
|
||||
row.restart();
|
||||
rec.zero();
|
||||
rec.put(CES_NPROGTR, nprogtr);
|
||||
@ -171,7 +174,7 @@ void TVariazione_effetti::common_f(const TMask& m)
|
||||
real imp_eff(row.get(shrighe.cid2index(F_IMPEFF)));
|
||||
if (imp_eff == 0.0) continue; // salta le righe con importo nullo
|
||||
row.restart();
|
||||
TRectype& rec = _effetto->row_r(ii, TRUE);
|
||||
TRectype& rec = _effetto->row_r(ii, true);
|
||||
rec.zero();
|
||||
rec.put(REFF_NPROGTR, nprogtr);
|
||||
rec.put(REFF_NRIGATR, ii);
|
||||
@ -301,16 +304,19 @@ bool TVariazione_effetti::user_create()
|
||||
_rel = new TRelation(LF_EFFETTI);
|
||||
_effetto = new TEffetto;
|
||||
_msk = new TMask("ef0100a") ;
|
||||
|
||||
_msk->set_handler(F_CODCF, clifo_handler);
|
||||
_msk->set_handler(F_DATASCAD, datascad_handler);
|
||||
_msk->set_handler(F_MANDATO, mandato_handler);
|
||||
_msk->set_handler(F_CODVAL, codval_handler);
|
||||
_msk->set_handler(F_CAMBIO, cambio_handler);
|
||||
_msk->set_handler(F_EFFCONT, contab_handler);
|
||||
_msk->set_handler(F_SHEET_RIGHE, handle_sheet);
|
||||
righe_sheet().set_append(TRUE);
|
||||
|
||||
righe_sheet().set_append(true);
|
||||
righe_sheet().set_notify(impeff_notify);
|
||||
_msk->sfield(F_SHEET_RIGHE).sheet_mask().set_handler(F_NUMFATT, fatt_handler);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// distrugge la relap
|
||||
@ -319,7 +325,7 @@ bool TVariazione_effetti::user_destroy()
|
||||
delete _msk;
|
||||
delete _effetto;
|
||||
delete _rel;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// handler che permette di effettuare il controllo sul fatto
|
||||
@ -333,23 +339,23 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
|
||||
{ // si controllano le righe del effetto nello sheet
|
||||
TSheet_field& sf = m.sfield(F_SHEET_RIGHE);
|
||||
int items = sf.items();
|
||||
bool found = FALSE;
|
||||
bool found = false;
|
||||
for (int i = 0; i < items && !found; i++)// scandisco tutte le righe dello sheet
|
||||
{
|
||||
TToken_string& row = sf.row(i);
|
||||
real imp_eff(row.get(sf.cid2index(F_IMPEFF)));
|
||||
// controlla che le righe abbiano un importo
|
||||
if (imp_eff != 0.0) found = TRUE;
|
||||
if (imp_eff != 0.0) found = true;
|
||||
}
|
||||
// se non ha trovato righe nello sheet oppure se quelle che ci sono non
|
||||
// hanno importo
|
||||
if (!found)
|
||||
{ // non permetto di salvare l'effetto
|
||||
error_box(TR("L'effetto non può contenere righe con importo nullo!"));
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TVariazione_effetti::clifo_handler(TMask_field& f, KEY k)
|
||||
@ -389,14 +395,29 @@ bool TVariazione_effetti::datascad_handler(TMask_field& f, KEY k)
|
||||
return f.error_box(FR("La data fattura della riga %d è successiva alla data di scadenza"), r+1);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TVariazione_effetti::mandato_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB && !f.empty())
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
TEdit_field& i = m.efield(F_IBAN_STATO);
|
||||
i.validate(K_TAB);
|
||||
m.set(F_CODABI, m.get(F_BBAN_ABI));
|
||||
m.set(F_CODCAB, m.get(F_BBAN_CAB));
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// handler che permette il controllo sulla abilitazione dei campi collegati
|
||||
// al codice valuta
|
||||
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k, TRUE))
|
||||
if (f.to_check(k, true))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
const TString& val = f.get();
|
||||
@ -419,14 +440,14 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
|
||||
if (f.focusdirty())
|
||||
sf.force_update();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// handler che gestisce la modifica del cambio
|
||||
bool TVariazione_effetti::cambio_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
TMask &m = f.mask();
|
||||
//if (k == K_TAB && f.to_check(k, TRUE))
|
||||
//if (k == K_TAB && f.to_check(k, true))
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
const real cambio = f.get();
|
||||
@ -447,7 +468,7 @@ bool TVariazione_effetti::cambio_handler(TMask_field& f, KEY k)
|
||||
if (f.focusdirty())
|
||||
sf.force_update();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// handler che permette il controllo sulla abilitazione dei campi collegati
|
||||
@ -488,7 +509,7 @@ bool TVariazione_effetti::fatt_handler(TMask_field& f, KEY k)
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
|
||||
@ -502,7 +523,7 @@ bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
|
||||
sf.enable_column(F_NUMPART, da_contab);
|
||||
sf.force_update();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli
|
||||
@ -531,14 +552,14 @@ void TVariazione_effetti::calcola_totali()
|
||||
// vengano eliminate tutte le righe dell'effetto, almeno una deve rimanere
|
||||
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
|
||||
{
|
||||
if (s.to_check(key, TRUE))
|
||||
if (s.to_check(key, true))
|
||||
{
|
||||
calcola_totali();
|
||||
}
|
||||
//se rimane una sola riga nello sheet non la si può cancellare
|
||||
if (key == K_DEL && s.items() == 1)
|
||||
return s.error_box(TR("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!"));
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int ef0100(int argc, char* argv[])
|
||||
|
@ -42,6 +42,7 @@
|
||||
#define F_DCIG 237
|
||||
#define F_CONTSEP 238
|
||||
#define F_DESCONTSEP 239
|
||||
#define F_MANDATO 240
|
||||
|
||||
#define F_IBAN 250
|
||||
#define F_IBAN_STATO 251
|
||||
|
@ -6,14 +6,14 @@ ENDPAGE
|
||||
|
||||
PAGE "Testata/Righe" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
END
|
||||
|
||||
LIST F_TIPOCF 10
|
||||
LIST F_TIPOCF 1 10
|
||||
BEGIN
|
||||
PROMPT 1 1 "Tipo effetto "
|
||||
PROMPT 1 1 "Effetto "
|
||||
ITEM "C|Attivo"
|
||||
MESSAGE SHOW,8@|HIDE,9@
|
||||
ITEM "F|Passivo"
|
||||
@ -23,7 +23,7 @@ END
|
||||
|
||||
NUMBER F_NPROGTR 7
|
||||
BEGIN
|
||||
PROMPT 1 2 "Numero "
|
||||
PROMPT 30 1 "Numero "
|
||||
FIELD NPROGTR
|
||||
KEY 1
|
||||
USE LF_EFFETTI SELECT (TIPOCF=#F_TIPOCF)&&(BETWEEN(CODCF,#F_CODCF,#F_CODCF))
|
||||
@ -44,19 +44,19 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 1 3 "Cliente"
|
||||
PROMPT 1 2 "Cliente"
|
||||
GROUP 8
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 1 3 "Fornitore"
|
||||
PROMPT 1 2 "Fornitore"
|
||||
GROUP 9
|
||||
END
|
||||
|
||||
NUMBER F_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 15 3 ""
|
||||
PROMPT 10 2 ""
|
||||
FIELD CODCF
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
@ -74,7 +74,7 @@ END
|
||||
|
||||
STRING F_CFRAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 25 3 ""
|
||||
PROMPT 23 2 ""
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF F_TIPOCF SELECT
|
||||
INPUT RAGSOC F_CFRAGSOC
|
||||
@ -88,7 +88,7 @@ END
|
||||
|
||||
DATE F_DATASCAD
|
||||
BEGIN
|
||||
PROMPT 1 4 "Data scadenza "
|
||||
PROMPT 1 3 "Scadenza "
|
||||
FIELD DATASCAD
|
||||
KEY 3
|
||||
USE LF_EFFETTI KEY 3 SELECT (TIPOCF=#F_TIPOCF)&&(BETWEEN(CODCF, #F_CODCF, #F_CODCF))
|
||||
@ -109,21 +109,29 @@ END
|
||||
|
||||
LIST F_TIPOPAG 24
|
||||
BEGIN
|
||||
PROMPT 1 6 "Tipo pagamento "
|
||||
PROMPT 1 5 "Tipo pagamento "
|
||||
FIELD TIPOPAG
|
||||
ITEM "2|Tratta"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "3|Ricevuta Bancaria"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "4|Cessione"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "5|Paghero'"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "6|Lettera di credito"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "7|Tratta accettata"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
ITEM "8|Rapporti interb. diretti"
|
||||
MESSAGE ENABLE,F_MANDATO
|
||||
ITEM "9|Bonifico"
|
||||
MESSAGE DISABLE,F_MANDATO
|
||||
END
|
||||
|
||||
STRING F_ULTCLASS 1
|
||||
BEGIN
|
||||
PROMPT 46 6 "Ulteriore classificazione "
|
||||
PROMPT 46 5 "Ulteriore classificazione "
|
||||
FIELD ULTCLASS
|
||||
USE %CLR
|
||||
INPUT CODTAB[1,1] F_TIPOPAG SELECT
|
||||
@ -133,6 +141,22 @@ BEGIN
|
||||
OUTPUT F_ULTCLASS CODTAB[2,2]
|
||||
END
|
||||
|
||||
STRING F_MANDATO 35
|
||||
BEGIN
|
||||
PROMPT 1 6 "Mandato R.I.D. "
|
||||
USE &EFMAN SELECT I0=#F_CODCF
|
||||
INPUT CODTAB F_MANDATO
|
||||
DISPLAY "Codice@35" CODTAB
|
||||
DISPLAY "Data@10" D0
|
||||
DISPLAY "IBAN@34" S1
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_MANDATO CODTAB
|
||||
OUTPUT F_IBAN S1
|
||||
CHECTYPE REQUIRED
|
||||
FIELD MANDATO
|
||||
ADD RUN ef0 -1 &EFMAN
|
||||
END
|
||||
|
||||
STRING F_CODVAL 3
|
||||
BEGIN
|
||||
PROMPT 1 7 "Codice valuta "
|
||||
|
251
ef/ef0200.cpp
251
ef/ef0200.cpp
@ -1,254 +1,13 @@
|
||||
#include <applicat.h>
|
||||
#include <sheet.h>
|
||||
#include <msksheet.h>
|
||||
#include <modtbapp.h>
|
||||
|
||||
#include "ef0.h"
|
||||
#include "ef0200.h"
|
||||
|
||||
#include <clifo.h>
|
||||
#include <effetti.h>
|
||||
|
||||
class Creazione_Effetti_da_EC : public TSkeleton_application
|
||||
class TMandati_app : public TTable_module_application
|
||||
{
|
||||
TMask * _msk;
|
||||
TArray_sheet * _Partite_aperte;
|
||||
real _residuo;
|
||||
|
||||
void Load_Partite_Aperte(const long cli);
|
||||
static bool Gen_Handler(TMask_field& f, KEY k);
|
||||
static bool Gen_Notify(TSheet_field& sheet, int r, KEY k);
|
||||
static bool Cli_Handler(TMask_field& f, KEY k);
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
public:
|
||||
real get_res() {return _residuo;}
|
||||
void set_res(const real& a) {_residuo = a;}
|
||||
TMask* get_msk() {return _msk;}
|
||||
Creazione_Effetti_da_EC() : _residuo(0.0) {}
|
||||
public:
|
||||
};
|
||||
|
||||
inline Creazione_Effetti_da_EC& app() {return (Creazione_Effetti_da_EC&)main_app();}
|
||||
|
||||
void Creazione_Effetti_da_EC::Load_Partite_Aperte(const long cli)
|
||||
{
|
||||
/*
|
||||
Caricamento partite aperte da E.C.
|
||||
|
||||
Questo che segue e' pseudo-codice; andra' verificato non appena
|
||||
sara' completato lo scadenziario.
|
||||
|
||||
TLocalisamfile Ec(LF_........);
|
||||
|
||||
* Carica tutte le partite aperte del cliente *
|
||||
|
||||
Ec.zero();
|
||||
Ec.put(EC_CODCLI,cli);
|
||||
Ec.read();
|
||||
|
||||
Finche' si tratta dello stesso cliente...
|
||||
|
||||
while (Ec.good() && Ec.get_long(EC_CODCLI) == cli)
|
||||
{
|
||||
|
||||
Controlla se la partita esaminata e' aperta...
|
||||
|
||||
if (Ec.get(EC_APERTA))
|
||||
{
|
||||
Con questo le carica tutte nello sheet...
|
||||
|
||||
TToken_string riga(80);
|
||||
riga.cut(0);
|
||||
riga.add(Ec.get(EC_ANNO));
|
||||
riga.add(Ec.get(EC_NUMERO));
|
||||
riga.add(Ec.get(EC_DATADOC));
|
||||
riga.add(Ec.get(EC_SALDO));
|
||||
_Partite_aperte->add(riga);
|
||||
}
|
||||
|
||||
Legge il prossimo record
|
||||
|
||||
Ec.next()
|
||||
}
|
||||
*/
|
||||
TToken_string riga(80);
|
||||
riga.cut(0);
|
||||
riga.add("");
|
||||
riga.add("1994");
|
||||
riga.add("1");
|
||||
riga.add("10-11-94");
|
||||
riga.add("19000000");
|
||||
_Partite_aperte->add(riga);
|
||||
riga.cut(0);
|
||||
riga.add("");
|
||||
riga.add("1994");
|
||||
riga.add("2");
|
||||
riga.add("11-11-94");
|
||||
riga.add("18000000");
|
||||
_Partite_aperte->add(riga);
|
||||
riga.cut(0);
|
||||
riga.add("");
|
||||
riga.add("1994");
|
||||
riga.add("3");
|
||||
riga.add("16-11-94");
|
||||
riga.add("23009000");
|
||||
_Partite_aperte->add(riga);
|
||||
riga.cut(0);
|
||||
riga.add("");
|
||||
riga.add("1994");
|
||||
riga.add("4");
|
||||
riga.add("19-11-94");
|
||||
riga.add("450600");
|
||||
_Partite_aperte->add(riga);
|
||||
}
|
||||
|
||||
bool Creazione_Effetti_da_EC::Gen_Handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
real importo = m.get(F_RATA);
|
||||
importo += m.get_real(F_SPESE);
|
||||
importo += m.get_real(F_BOLLI);
|
||||
m.set(F_IMPEFF, importo);
|
||||
f.set_focusdirty(FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool Creazione_Effetti_da_EC::Gen_Notify(TSheet_field& sheet, int r, KEY k)
|
||||
{
|
||||
if (k == K_CTRL + K_DEL)
|
||||
return TRUE;
|
||||
if (k == K_INS)
|
||||
{
|
||||
if (app().get_res().is_zero())
|
||||
{
|
||||
warning_box(TR("Residuo da ripartire gia' annullato"));
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
TToken_string & row = sheet.row(r);
|
||||
const real importo(row.get(1));
|
||||
static real old_rata;
|
||||
|
||||
switch (k)
|
||||
{
|
||||
case K_SPACE:
|
||||
old_rata = importo;
|
||||
break;
|
||||
case K_DEL:
|
||||
{
|
||||
const real new_res = app().get_res() + importo;
|
||||
|
||||
app().set_res(new_res);
|
||||
}
|
||||
break;
|
||||
case K_ENTER:
|
||||
{
|
||||
const real new_res = app().get_res() - importo + old_rata;
|
||||
if (new_res < ZERO)
|
||||
{
|
||||
warning_box(TR("Non e' possibile superare l'importo da ripartire"));
|
||||
if (old_rata.is_zero())
|
||||
{
|
||||
row.add(app().get_res().string(),1);
|
||||
app().set_res(ZERO);
|
||||
}
|
||||
else
|
||||
row.add(old_rata.string(),1);
|
||||
}
|
||||
else
|
||||
app().set_res(new_res);
|
||||
real totale = importo;
|
||||
totale+= real(row.get(2));
|
||||
totale+= real(row.get(3));
|
||||
row.add(totale.string(),4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
sheet.mask().set(F_RESIDUO,app().get_res());
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool Creazione_Effetti_da_EC::Cli_Handler(TMask_field&f, KEY k)
|
||||
{
|
||||
if (f.focusdirty())
|
||||
{
|
||||
TSheet_field& sheet =(TSheet_field&)f.mask().field(F_SHEET_EFF);
|
||||
sheet.reset();
|
||||
sheet.force_update();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool Creazione_Effetti_da_EC::create()
|
||||
{
|
||||
_msk = new TMask("ef0200a");
|
||||
TSheet_field& sheet = _msk->sfield(F_SHEET_EFF);
|
||||
sheet.set_notify(Gen_Notify);
|
||||
sheet.enable_column(4,FALSE);
|
||||
TMask& mask= sheet.sheet_mask();
|
||||
mask.set_handler(F_RATA,Gen_Handler);
|
||||
mask.set_handler(F_SPESE,Gen_Handler);
|
||||
mask.set_handler(F_BOLLI,Gen_Handler);
|
||||
_msk->set_handler(F_CODCF,Cli_Handler);
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool Creazione_Effetti_da_EC::destroy()
|
||||
{
|
||||
if (_msk != NULL) delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void Creazione_Effetti_da_EC::main_loop()
|
||||
{
|
||||
KEY tasto;
|
||||
|
||||
do {
|
||||
tasto=get_msk()->run();
|
||||
switch (tasto)
|
||||
{
|
||||
case K_ENTER: // first check if the application can write effects
|
||||
{
|
||||
TSheet_field& sheet =(TSheet_field&)get_msk()->field(F_SHEET_EFF);
|
||||
if (!_residuo && sheet.items()>0)
|
||||
message_box(TR("Perform writing procedure..."));
|
||||
break;
|
||||
}
|
||||
case K_F6: //Selects opened counts from E.C.
|
||||
{
|
||||
_Partite_aperte = new TArray_sheet(-1,1,0,-1,TR("Selezione partite aperte"),"@1|Anno|Numero|Data documento|Saldo@15", 0, 1);
|
||||
Load_Partite_Aperte(get_msk()->get_long(F_CODCF));
|
||||
if (_Partite_aperte->run() == K_ENTER)
|
||||
{
|
||||
_residuo = ZERO;
|
||||
for (int i = 0; i < _Partite_aperte->items(); i++)
|
||||
if (_Partite_aperte->checked(i))
|
||||
_residuo += real(_Partite_aperte->row(i).get(4));
|
||||
get_msk()->set(F_RESIDUO,_residuo);
|
||||
TSheet_field& sheet = (TSheet_field&)get_msk()->field(F_SHEET_EFF);
|
||||
sheet.reset();
|
||||
}
|
||||
delete _Partite_aperte;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} while (tasto!=K_QUIT);
|
||||
}
|
||||
|
||||
int ef0200(int argc, char* argv[])
|
||||
{
|
||||
Creazione_Effetti_da_EC a ;
|
||||
a.run(argc, argv, TR("Creazione effetti da E.C."));
|
||||
TMandati_app a;
|
||||
a.run(argc, argv, TR("Tabelle modulo Effetti"));
|
||||
return 0;
|
||||
}
|
||||
|
20
ef/ef0200.h
20
ef/ef0200.h
@ -8,24 +8,8 @@
|
||||
#define F_INDIRIZZO 103
|
||||
#define F_COMUNE 104
|
||||
#define F_PROV 105
|
||||
#define F_CODABI 106
|
||||
#define F_CODCAB 107
|
||||
#define F_TIPOEFF 108
|
||||
#define F_ADDEBITO 109
|
||||
#define F_ADDSPINC 110
|
||||
#define F_ADDBOLLITR 111
|
||||
#define F_ADDBOLLIRB 112
|
||||
#define F_ADDBNS1500 113
|
||||
#define F_RESIDUO 114
|
||||
#define F_SHEET_EFF 115
|
||||
|
||||
#define DLG_PARTITE 201
|
||||
|
||||
// campi per maschera ef0200b
|
||||
#define F_DATASCAD 101
|
||||
#define F_RATA 102
|
||||
#define F_SPESE 103
|
||||
#define F_BOLLI 104
|
||||
#define F_IMPEFF 105
|
||||
#define F_MANDATO 110
|
||||
#define F_DESCR 111
|
||||
|
||||
#endif // __EF0200_H
|
||||
|
144
ef/ef0200a.uml
144
ef/ef0200a.uml
@ -1,18 +1,22 @@
|
||||
#include "ef0200.h"
|
||||
|
||||
PAGE "Selezione dati" -1 -1 78 19
|
||||
TOOLBAR "" 0 0 0 2
|
||||
#include <relapbar.h>
|
||||
END{AGE
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
PAGE "Mandati" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 1 0 "Dati clienti"
|
||||
PROMPT 1 1 "@bCliente"
|
||||
END
|
||||
|
||||
NUMBER F_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cliente "
|
||||
USE LF_CLIFO KEY 1
|
||||
JOIN LF_CFVEN TO LF_CLIFO KEY 1 INTO CODCF=CODCF TIPOCF="C"
|
||||
JOIN LF_COMUNI TO LF_CLIFO KEY 1 INTO STATO=STATOCF COM=COMCF
|
||||
PROMPT 2 2 "Codice "
|
||||
USE LF_CLIFO
|
||||
JOIN LF_CFVEN TO LF_CLIFO INTO CODCF=CODCF TIPOCF="C"
|
||||
JOIN LF_COMUNI TO LF_CLIFO INTO STATO=STATOCF COM=COMCF
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
@ -36,7 +40,7 @@ END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 22 1 ""
|
||||
PROMPT 22 2 ""
|
||||
USE LF_CLIFO KEY 2
|
||||
JOIN LF_CFVEN TO LF_CLIFO KEY 1 INTO CODCF=CODCF TIPOCF="C"
|
||||
JOIN LF_COMUNI TO LF_CLIFO KEY 1 INTO STATO=STATOCF COM=COMCF
|
||||
@ -51,119 +55,61 @@ END
|
||||
|
||||
STRING F_INDIRIZZO 35
|
||||
BEGIN
|
||||
PROMPT 2 2 "Indirizzo "
|
||||
PROMPT 2 3 "Indirizzo "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_COMUNE 50
|
||||
BEGIN
|
||||
PROMPT 2 3 "Comune "
|
||||
PROMPT 2 4 "Comune "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_PROV 2
|
||||
BEGIN
|
||||
PROMPT 70 3 ""
|
||||
PROMPT 70 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_CODABI 5
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 2 5 "Banca d'appoggio "
|
||||
FLAGS "RZ"
|
||||
USE %BAN KEY 1 SELECT CODTAB ?="?????"
|
||||
INPUT CODTAB F_CODABI
|
||||
DISPLAY "Codice ABI" CODTAB[1,5]
|
||||
DISPLAY "Codice CAB" CODTAB[6,10]
|
||||
DISPLAY "Denominazione@50" S0
|
||||
OUTPUT F_CODABI CODTAB[1,5]
|
||||
OUTPUT F_CODCAB CODTAB[6,10]
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Inserire il codice della banca d'appoggio"
|
||||
PROMPT 1 6 "@bMandato"
|
||||
END
|
||||
|
||||
NUMBER F_CODCAB 5
|
||||
STRING F_MANDATO 35
|
||||
BEGIN
|
||||
PROMPT 32 5 ""
|
||||
FLAGS "RZ"
|
||||
USE %BAN
|
||||
INPUT CODTAB[1,5] F_CODABI
|
||||
INPUT CODTAB[6,10] F_CODCAB
|
||||
COPY DISPLAY F_CODABI
|
||||
COPY OUTPUT F_CODABI
|
||||
CHECKTYPE NORMAL
|
||||
STRING 2 7 "Codice "
|
||||
USE &EFMAN SELECT (#F_CLIFO=0)||(#F_CLIFO=I0)
|
||||
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=I0
|
||||
INPUT CODTAB F_MANDATO
|
||||
DISPLAY "Codice@35" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Cliente" I0
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
OUTPUT F_MANDATO CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
END
|
||||
|
||||
LIST F_TIPOEFF 18
|
||||
STRING F_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 43 5 "Tipo effetto "
|
||||
ITEM "2|Tratta"
|
||||
ITEM "3|Ricevuta bancaria"
|
||||
HELP "Inserire il tipo dell'effetto"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 35 4
|
||||
BEGIN
|
||||
PROMPT 1 6 "Addebiti"
|
||||
END
|
||||
|
||||
BOOLEAN F_ADDSPINC
|
||||
BEGIN
|
||||
PROMPT 2 7 "Sp. incasso"
|
||||
HELP "Flag di addebito delle spese d'incasso"
|
||||
END
|
||||
|
||||
BOOLEAN F_ADDBOLLIRB
|
||||
BEGIN
|
||||
PROMPT 19 7 "Bolli R.B."
|
||||
HELP "Flag di addebito bolli delle R.B. "
|
||||
END
|
||||
|
||||
BOOLEAN F_ADDBOLLITR
|
||||
BEGIN
|
||||
PROMPT 2 8 "Bolli Tr."
|
||||
HELP "Flag di addebito bolli delle tratte"
|
||||
END
|
||||
|
||||
BOOLEAN F_ADDBNS1500
|
||||
BEGIN
|
||||
PROMPT 19 8 "Bollo esente"
|
||||
HELP "Flag di addebito dei bolli"
|
||||
END
|
||||
|
||||
BUTTON DLG_PARTITE 9 2
|
||||
BEGIN
|
||||
PROMPT 39 8 "~Partite"
|
||||
MESSAGE EXIT,K_F6
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT 52 8 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT 65 8 ""
|
||||
END
|
||||
|
||||
CURRENCY F_RESIDUO 15
|
||||
BEGIN
|
||||
PROMPT 2 10 "Residuo da ripartire "
|
||||
FLAGS "RD"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEET_EFF 74
|
||||
BEGIN
|
||||
PROMPT 2 12 "Immissione effetti"
|
||||
ITEM "Data scad."
|
||||
ITEM "Importo rata@15 R"
|
||||
ITEM "Spese incasso@15 R"
|
||||
ITEM "Importo bolli@15 R"
|
||||
ITEM "Importo effetto@15 R"
|
||||
STRING 2 8 "Descrizione "
|
||||
USE &EFMAN KEY 2 SELECT (#F_CLIFO=0)||(#F_CLIFO=I0)
|
||||
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=I0
|
||||
INPUT CODTAB F_MANDATO
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice@35" CODTAB
|
||||
DISPLAY "Cliente" I0
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
COPY OUTPUT F_MANDATO
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD S0
|
||||
KEY 2
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
#include "ef0200b.uml"
|
||||
|
||||
|
139
ef/ef0300.cpp
139
ef/ef0300.cpp
@ -1,17 +1,17 @@
|
||||
#include <relapp.h>
|
||||
#include <msksheet.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <clifo.h>
|
||||
#include <relapp.h>
|
||||
|
||||
#include "ef0.h"
|
||||
#include "ef0300.h"
|
||||
#include "ef0301.h"
|
||||
|
||||
#include <clifo.h>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//Classe per la gestione di distinte (inserimento, modifica, cancellazione) //
|
||||
// e per la creazione automatica di distinte per importi. //
|
||||
// Classe per la gestione di distinte (inserimento, modifica, cancellazione)//
|
||||
// e per la creazione automatica di distinte per importi. //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TVariazione_distinte: public TRelation_application
|
||||
{
|
||||
TMask *_msk, *_m2;
|
||||
@ -22,14 +22,15 @@ protected:
|
||||
virtual void init_query_mode(TMask&);
|
||||
virtual void init_insert_mode(TMask&);
|
||||
virtual void init_modify_mode(TMask&);
|
||||
virtual const char* get_next_key();
|
||||
virtual int read(TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual bool get_next_key(TToken_string& key);
|
||||
virtual int read(TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual bool remove();
|
||||
virtual TMask* get_mask(int mode) {return _msk;}
|
||||
virtual bool changing_mask(int mode) {return false;}
|
||||
virtual bool has_filtered_cursor() const { return true; }
|
||||
virtual bool has_filtered_cursor() const { return true; }
|
||||
virtual bool changing_mask(int mode) { return false; }
|
||||
virtual TMask* get_mask(int mode) { return _msk; }
|
||||
|
||||
static bool tipodist_handler(TMask_field& f, KEY k);
|
||||
static bool importo_handler(TMask_field& f, KEY k);
|
||||
static bool imp_sel_handler(TMask_field& f, KEY k);
|
||||
@ -37,6 +38,7 @@ protected:
|
||||
static bool imp_notify(TSheet_field& s, int r, KEY key);
|
||||
static bool dist_check_handler(TMask_field& f, KEY key);
|
||||
static bool impdist_notify(TSheet_field& s, int r, KEY key);
|
||||
static bool impdist_handler(TMask_field& s, KEY key);
|
||||
static bool conferma_handler(TMask_field& f, KEY k);
|
||||
static bool annulla_handler(TMask_field& f, KEY k);
|
||||
static bool data_handler(TMask_field& f, KEY k);
|
||||
@ -62,9 +64,7 @@ protected:
|
||||
TToken_string* common_f(const TMask& m, TToken_string& datidist);
|
||||
|
||||
public:
|
||||
virtual TRelation* get_relation() const {return _rel;}
|
||||
TVariazione_distinte() {};
|
||||
virtual ~TVariazione_distinte() {};
|
||||
virtual TRelation* get_relation() const { return _rel;}
|
||||
};
|
||||
|
||||
// restituisce un riferimento all' applicazione
|
||||
@ -109,7 +109,7 @@ void TVariazione_distinte::init_modify_mode(TMask& m)
|
||||
}
|
||||
|
||||
// ritorna il prossimo numero di distinta valido
|
||||
const char* TVariazione_distinte::get_next_key()
|
||||
bool TVariazione_distinte::get_next_key(TToken_string& key)
|
||||
{
|
||||
const TString& tipodist = curr_mask().get(F_TIPODIST);
|
||||
TLocalisamfile& effetti = _rel->lfile();
|
||||
@ -127,7 +127,8 @@ const char* TVariazione_distinte::get_next_key()
|
||||
ndist += effetti.get_long(EFF_NDIST);
|
||||
}
|
||||
|
||||
return format("%d|%ld",F_NUMBER,ndist);
|
||||
key.format("%d|%ld",F_NUMBER,ndist);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ritorna true se trovo nell'array delle righe distinta l'effetto
|
||||
@ -135,13 +136,11 @@ const char* TVariazione_distinte::get_next_key()
|
||||
bool TVariazione_distinte::cerca(long num)
|
||||
{
|
||||
TArray& righedist = _distinta->righe();
|
||||
|
||||
for (int i = _distinta->items() - 1; i >= 0; i--)// ciclo sugli elementi dell'array
|
||||
{
|
||||
TEffetto& eff = (TEffetto&)righedist[i];
|
||||
|
||||
if (num == eff.get_long(EFF_NPROGTR))
|
||||
return true;
|
||||
TEffetto& eff = (TEffetto&)righedist[i];
|
||||
if (num == eff.get_long(EFF_NPROGTR))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -315,7 +314,7 @@ int TVariazione_distinte::rewrite(const TMask& m)
|
||||
}
|
||||
if (items <= to_delete)
|
||||
{ // non posso cancellare tutti gli effetti di una distinta
|
||||
error_box(TR("Impossibile escludere tutti gli effetti dalla distinta.\n Utilizzare elimina per cancellarla."));
|
||||
error_box(TR("Impossibile escludere tutti gli effetti dalla distinta.\nUtilizzare elimina per cancellarla."));
|
||||
return NOERR;
|
||||
}
|
||||
if (to_delete > 0)
|
||||
@ -400,31 +399,33 @@ int TVariazione_distinte::write(const TMask& m)
|
||||
// relativi.
|
||||
bool TVariazione_distinte::remove()
|
||||
{
|
||||
TMask* m = _msk;
|
||||
char tipodist = m->get(F_TIPODIST)[0];
|
||||
long ndist = m->get_long(F_NUMBER);
|
||||
bool err = _distinta->remove(tipodist, ndist) == NOERR;
|
||||
return err;
|
||||
TMask& m = *_msk;
|
||||
char tipodist = m.get(F_TIPODIST)[0];
|
||||
long ndist = m.get_long(F_NUMBER);
|
||||
return _distinta->remove(tipodist, ndist) == NOERR;
|
||||
}
|
||||
|
||||
// creo la relap
|
||||
bool TVariazione_distinte::user_create()
|
||||
{
|
||||
open_files(LF_TAB, LF_TABCOM, LF_EFFETTI, LF_REFFETTI, LF_CESS, NULL);
|
||||
open_files(LF_TAB, LF_TABCOM, LF_CLIFO, LF_EFFETTI, LF_REFFETTI, LF_CESS, NULL);
|
||||
_msk = new TMask("ef0300a");
|
||||
_m2 = new TMask("ef0300c");
|
||||
_m2 = new TMask("ef0300c");
|
||||
_rel = new TRelation(LF_EFFETTI);
|
||||
if (_rel->last() == NOERR)
|
||||
_msk->set(F_TIPODIST, _rel->curr().get("TIPODIST"));
|
||||
_msk->set(F_TIPODIST, _rel->curr().get(EFF_TIPODIST));
|
||||
|
||||
_distinta = new TDistinta;
|
||||
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
|
||||
|
||||
_msk->set_handler(F_TIPODIST, tipodist_handler);
|
||||
_msk->set_handler(F_IMPBUTTON, importo_handler);
|
||||
_msk->set_handler(F_TIPODIST, tipodist_handler);
|
||||
_msk->set_handler(F_IMPBUTTON, importo_handler);
|
||||
_msk->set_handler(F_UNCONTABIL, uncontabilize_handler);
|
||||
righe_sheet().set_notify(impdist_notify);
|
||||
righe_sheet().sheet_mask().set_handler(FIRST_FIELD, dist_check_handler);
|
||||
|
||||
TSheet_field& rs = righe_sheet();
|
||||
rs.set_notify(impdist_notify);
|
||||
rs.set_handler(impdist_handler);
|
||||
rs.sheet_mask().set_handler(FIRST_FIELD, dist_check_handler);
|
||||
|
||||
_m2->set_handler(F_IMPSEL, imp_sel_handler);
|
||||
_m2->set_handler(DLG_OK, conferma_handler);
|
||||
@ -432,8 +433,11 @@ bool TVariazione_distinte::user_create()
|
||||
_m2->set_handler(F_DADATA, data_handler);
|
||||
_m2->set_handler(F_ADATA, data_handler);
|
||||
_m2->set_handler(F_TIPORD, ordina_handler);
|
||||
righe_sel_sheet().set_notify(imp_notify);
|
||||
righe_sel_sheet().sheet_mask().set_handler(FIRST_FIELD, check_handler);
|
||||
|
||||
TSheet_field& rss = righe_sel_sheet();
|
||||
rss.set_notify(imp_notify);
|
||||
rss.sheet_mask().set_handler(FIRST_FIELD, check_handler);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -482,10 +486,10 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
|
||||
TLocalisamfile f(LF_EFFETTI);
|
||||
// per prendere la ragione sociale del cliente di cui ho il codice
|
||||
TToken_string riga(80);
|
||||
TMask* m2 = app()._m2;
|
||||
TMask& m2 = *app()._m2;
|
||||
if (reset)
|
||||
m2->reset();
|
||||
TSheet_field& sf = m2->sfield(F_SHEET);
|
||||
m2.reset();
|
||||
TSheet_field& sf = m2.sfield(F_SHEET);
|
||||
if (reset)
|
||||
sf.reset();
|
||||
|
||||
@ -495,7 +499,8 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
|
||||
int err, i = 0;
|
||||
err = eff.read(f, tipodist, ndist, nrigadist);
|
||||
int tipop = eff.get_int(EFF_TIPOPAG);
|
||||
int tipod = app()._msk->get(F_TIPOCF)[0];
|
||||
const char tipo_cf = app()._msk->get(F_TIPOCF)[0]; // 'C'liente o 'F'ornitore
|
||||
char tipo_a = ' '; // 'F'isica o 'G'iuridica
|
||||
|
||||
while ( (err == NOERR) && (tipodist == 0))
|
||||
{
|
||||
@ -505,14 +510,15 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
|
||||
const bool to_select = (tipopag == 0) || (tipopag == tipop) ||
|
||||
((tipopag == 2 || tipopag == 5 || tipopag == 7) &&
|
||||
(tipop == 2 || tipop == 5 || tipop == 7));
|
||||
const char tipo = eff.get_tipo();
|
||||
const char tipo = eff.get_tipo(); // C o F
|
||||
|
||||
const TString4 valuta = eff.get(EFF_CODVAL);
|
||||
|
||||
const bool valuta_ok = ::same_values(valuta, codval);
|
||||
const long numero = eff.get_long(EFF_NPROGTR);
|
||||
|
||||
if (to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipod)
|
||||
const bool is_good = to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipo_cf;
|
||||
if (is_good)
|
||||
{
|
||||
riga = " "; // Campo selezione
|
||||
|
||||
@ -549,8 +555,7 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
|
||||
if (!soldival.is_zero())
|
||||
riga.add(soldival.string());
|
||||
|
||||
sf.row(i) = riga;
|
||||
i++;
|
||||
sf.row(i++) = riga;
|
||||
}
|
||||
f.setkey(4);
|
||||
err = eff.next(f);//leggo l'effetto successivo
|
||||
@ -565,19 +570,18 @@ bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_SPACE)
|
||||
{
|
||||
TMask &m = f.mask();
|
||||
TMask& m = f.mask();
|
||||
const bool allo_sconto = f.get()[0] == 'S';
|
||||
|
||||
m.enable(F_TIPOPAG, !allo_sconto);
|
||||
if (allo_sconto)
|
||||
m.set(F_TIPOPAG,2);
|
||||
m.set(F_TIPOPAG, 2);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Handler per gestire il caricamento degli effetti nella distinta
|
||||
// in automatico relativamente ad un importo fissato (per la maschera
|
||||
// princiapale)
|
||||
// in automatico relativamente ad un importo fissato (per la maschera principale)
|
||||
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
// se importo distinta maggiore importo presentato si devono andare a
|
||||
@ -905,7 +909,7 @@ bool TVariazione_distinte::check_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
TSheet_field& s = app().righe_sel_sheet();
|
||||
TToken_string& row = s.row(s.selected());
|
||||
const bool checked = f.get().not_empty();
|
||||
const bool checked = f.get().full();
|
||||
row.add(checked ? "X" : "", 0);
|
||||
app().calcola();
|
||||
}
|
||||
@ -941,6 +945,39 @@ bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TVariazione_distinte::impdist_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
bool ok = true;
|
||||
if (key == K_ENTER && f.mask().get_int(F_TIPOPAG) == 8) // RID
|
||||
{
|
||||
TSheet_field& sf = (TSheet_field&)f;
|
||||
if (sf.items() > 1)
|
||||
{
|
||||
char tipoa = ' ';
|
||||
TString8 key;
|
||||
TLocalisamfile eff(LF_EFFETTI);
|
||||
FOR_EACH_SHEET_ROW(sf, r, riga) if (riga->get_char(0) != 'X') // riga valida (NON da eliminare)
|
||||
{
|
||||
eff.put(EFF_NPROGTR, riga->get(1));
|
||||
if (eff.read() == NOERR)
|
||||
{
|
||||
const char tipocf = eff.get_char(EFF_TIPOCF);
|
||||
const long codcf = eff.get_long(EFF_CODCF);
|
||||
key.format("%c|%ld", tipocf, codcf);
|
||||
char ta = cache().get(LF_CLIFO, key, CLI_TIPOAPER)[0];
|
||||
if (ta != 'G') ta = 'F'; // Fisica o giuridica
|
||||
if (tipoa < 'F') tipoa = ta;
|
||||
if (tipoa != ta)
|
||||
ok = error_box(FR("Tipo anagrafica non valido alla riga %d:\n"
|
||||
"Non possono coesistere RID relativi a persone Fisiche e Giuridiche"),
|
||||
r+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
|
||||
{
|
||||
if (key == K_DEL || key == K_INS)
|
||||
|
114
ef/ef0500.cpp
114
ef/ef0500.cpp
@ -5,6 +5,7 @@
|
||||
#include <modaut.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <tabmod.h>
|
||||
|
||||
#include "ef0.h"
|
||||
#include "ef0301.h"
|
||||
@ -142,7 +143,8 @@ class TRiba_file: public TFile_text
|
||||
protected:
|
||||
char tipo_incasso(const TRectype& eff) const; // U o V
|
||||
const char* tipo_sequenza(const TRectype& eff) const; // FRST,RCUR,FNAL,OOFF
|
||||
|
||||
TDate data_mandato(const TRectype& eff) const;
|
||||
|
||||
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
|
||||
|
||||
public:
|
||||
@ -151,7 +153,7 @@ public:
|
||||
const real tot_importi() const { return _tot_importi; }
|
||||
|
||||
bool tracciato_setif() const { return _tracciato_setif; }
|
||||
void set_tracciato_setif(bool tracciato_setif=TRUE) { _tracciato_setif = tracciato_setif; }
|
||||
void set_tracciato_setif(bool tracciato_setif=true) { _tracciato_setif = tracciato_setif; }
|
||||
|
||||
const TString& my_iban() const { return _my_iban; }
|
||||
void set_my_iban(const char* ib) { _my_iban = ib; }
|
||||
@ -295,7 +297,8 @@ void TEmissione::floppy()
|
||||
{
|
||||
const TRecnotype n_eff = _cur->items();
|
||||
TString msg;
|
||||
msg.format(FR("Emissione di %d effetti su file %s\ncon tracciato %s"), n_eff, RIBAFILENAME, (const char*)ribaini);
|
||||
msg.format(FR("Emissione di %d effetti su file %s\ncon tracciato %s"),
|
||||
n_eff, RIBAFILENAME, (const char*)ribaini);
|
||||
if (n_eff > 0)
|
||||
{
|
||||
TString_array keys ;
|
||||
@ -317,6 +320,36 @@ void TEmissione::floppy()
|
||||
}
|
||||
footer_ef(); //chiusura flusso effetti
|
||||
}
|
||||
|
||||
if (n_eff > 0 && tipocf == 'C' && tipopag == '8')
|
||||
{
|
||||
// Cambia stato ai mandati di tipo FRST in RCUR e lascia stare tutti gli altri
|
||||
TProgress_monitor pi(n_eff, TR("Aggiornamento sequenza mandati"));
|
||||
|
||||
// Aggiorna gli eventuali mandati da FRST a RCUR
|
||||
TModule_table man("MAN");
|
||||
for (cur = 0; cur.pos() < n_eff; ++cur)
|
||||
{
|
||||
const TString& mandato = eff.get(EFF_MANDATO);
|
||||
if (mandato.full())
|
||||
{
|
||||
man.put("CODTAB", mandato);
|
||||
if (man.read() == NOERR)
|
||||
{
|
||||
const TString& seq = man.get("S6");
|
||||
if (seq == "FRST")
|
||||
{
|
||||
man.put("S6", "RCUR");
|
||||
man.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!pi.add_status(1))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
message_box(msg);
|
||||
}
|
||||
else
|
||||
@ -427,9 +460,9 @@ bool TEmissione::test_record_type(const TString& key) const
|
||||
const TRectype& eff = _cur->curr();
|
||||
|
||||
if (key == "16")
|
||||
ok = _trasfile->my_iban().not_empty();
|
||||
ok = _trasfile->my_iban().full();
|
||||
else
|
||||
ok = eff.get(EFF_IBAN).not_empty();
|
||||
ok = eff.get(EFF_IBAN).full();
|
||||
|
||||
if (ok)
|
||||
{
|
||||
@ -444,10 +477,10 @@ bool TEmissione::test_record_type(const TString& key) const
|
||||
}
|
||||
|
||||
//emetto un record del flusso di effetti
|
||||
void TEmissione::record(const TString & chiave)
|
||||
void TEmissione::record(const TString& chiave)
|
||||
{
|
||||
TTracciato_record * lavoro = (TTracciato_record * )_trasfile->tracciati().objptr(chiave);
|
||||
//scandisco tutti i record di un effetto
|
||||
TTracciato_record* lavoro = (TTracciato_record*)_trasfile->tracciati().objptr(chiave);
|
||||
//scandisco tutti i record di un effetto
|
||||
|
||||
if (lavoro != NULL && chiave !="EF" && chiave !="RB" && chiave != "IB")
|
||||
{
|
||||
@ -488,8 +521,7 @@ void TEmissione::aggiorna_rb(TCursor* cur)
|
||||
effetto.put(EFF_NUMEMISS, numero);
|
||||
TDate data = _msk->get_date(F_DATAEMIS);
|
||||
effetto.put(EFF_DATAEMISS, data);
|
||||
bool cond = TRUE;
|
||||
effetto.put(EFF_EFFSTAMP, cond);
|
||||
effetto.put(EFF_EFFSTAMP, true);
|
||||
effetto.rewrite(eff);
|
||||
}
|
||||
}
|
||||
@ -498,12 +530,11 @@ void TEmissione::aggiorna_rb(TCursor* cur)
|
||||
// su tutti gli effetti nel cursore
|
||||
void TEmissione::aggiorna_dist(TCursor* cur)
|
||||
{
|
||||
TLocalisamfile &eff = cur->file(LF_EFFETTI);
|
||||
TLocalisamfile& eff = cur->file(LF_EFFETTI);
|
||||
for (*cur = 0; cur->pos() < cur->items(); ++(*cur))
|
||||
{
|
||||
TEffetto effetto = eff.curr();
|
||||
bool cond = TRUE;
|
||||
effetto.put(EFF_DISTSTAM, cond);
|
||||
effetto.put(EFF_DISTSTAM, true);
|
||||
effetto.rewrite(eff);
|
||||
}
|
||||
}
|
||||
@ -512,7 +543,6 @@ void TEmissione::aggiorna_dist(TCursor* cur)
|
||||
void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_vis)
|
||||
{
|
||||
TCursor* fcur = _formrb->cursor();
|
||||
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
||||
|
||||
TString filter;
|
||||
if (tipost == 'D' && !_msk->get_bool(F_RIST)) // se stampa definitiva effetti e se non deve ristampare le riba
|
||||
@ -522,8 +552,8 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_v
|
||||
fcur->setkey(4);
|
||||
if (ndist > 0)
|
||||
{
|
||||
TRectype darec(eff.curr());// fissa i dati per la scelta degli ...
|
||||
darec.zero();// ... effetti nel primo e nell'ultimo record del cursore
|
||||
TRectype darec(LF_EFFETTI);// fissa i dati per la scelta degli ...
|
||||
darec.zero(); //... effetti nel primo e nell'ultimo record del cursore
|
||||
darec.put(EFF_TIPODIST, tipodist);
|
||||
darec.put(EFF_NDIST, ndist);
|
||||
fcur->setregion(darec, darec);
|
||||
@ -536,8 +566,8 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_v
|
||||
fcur->setfilter(filter,TRUE);
|
||||
|
||||
_formrb->print(); // stampa il form
|
||||
if (tipost == 'D') // se emetto riba in definitiva devo aggiornare
|
||||
aggiorna_rb(fcur);// data, numero emissione e flag di stampa effetto
|
||||
if (tipost == 'D') // se emetto riba in definitiva devo aggiornare
|
||||
aggiorna_rb(fcur); // data, numero emissione e flag di stampa effetto
|
||||
}
|
||||
|
||||
// gestione emissione su moduli cartacei delle distinte
|
||||
@ -999,32 +1029,29 @@ char TRiba_file::tipo_incasso(const TRectype& eff) const
|
||||
{
|
||||
const char tipopag = eff.get_char(EFF_TIPOPAG);
|
||||
const char tipocf = eff.get_char(EFF_TIPOCF);
|
||||
const long codcf = eff.get_char(EFF_CODCF);
|
||||
const long codcf = eff.get_long(EFF_CODCF);
|
||||
|
||||
if (tipopag != '8' || tipocf != 'C' || codcf <= 0L)
|
||||
return ' ';
|
||||
if (tipopag != '8' || tipocf != 'C' || codcf <= 0L) // 8 = Rapporti Interbancari Diretti (alias RID)
|
||||
return ' '; // RID ONLY
|
||||
TString8 key; key.format("C|%ld", codcf);
|
||||
const TRectype& clifo = cache().get(LF_CLIFO, key);
|
||||
if (clifo.get_char(CLI_TIPOAPER) == 'G')
|
||||
return 'V';
|
||||
return 'U';
|
||||
return clifo.get_char(CLI_TIPOAPER) == 'G' ? 'V' : 'U';
|
||||
}
|
||||
|
||||
const char* TRiba_file::tipo_sequenza(const TRectype& eff) const
|
||||
{
|
||||
const char* seq = "OOFF";
|
||||
TEffetto e(eff);
|
||||
if (e.fatt())
|
||||
{
|
||||
const int nrata = e.row_r(0).get_int(REFF_NRATA);
|
||||
if (eff.get_bool(EFF_ULTRATA))
|
||||
seq = nrata <= 1 ? "OOFF" : "FNAL";
|
||||
else
|
||||
seq = nrata <= 1 ? "FRST" : "RCUR";
|
||||
}
|
||||
const char* seq = "RCUR";
|
||||
const TRectype& mandato = cache().get("&MAN", eff.get(EFF_MANDATO));
|
||||
if (!mandato.empty())
|
||||
seq = mandato.get("S6");
|
||||
return seq;
|
||||
}
|
||||
|
||||
TDate TRiba_file::data_mandato(const TRectype& eff) const
|
||||
{
|
||||
TDate dm = cache().get("&MAN", eff.get(EFF_MANDATO), "D0");
|
||||
return dm;
|
||||
}
|
||||
|
||||
// gestione dei messaggi estesi nei campi
|
||||
void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||
@ -1036,11 +1063,10 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
|
||||
// gestione dei campi fissi per i record delle riba
|
||||
// sintassi: _FISSO,!<valore>
|
||||
// dove: <valore> è la stringa fissa da emettere
|
||||
TString in(s.get());
|
||||
const TFixed_string in(s.get());
|
||||
CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'");
|
||||
in.ltrim(1);
|
||||
in.trim();
|
||||
valore = in;
|
||||
valore = in.mid(1);
|
||||
valore.trim();
|
||||
}
|
||||
else if (code == "_DATA")
|
||||
{
|
||||
@ -1337,11 +1363,14 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
|
||||
{
|
||||
valore = ini_get_string(CONFIG_DITTA, "ef", "CODSIA");
|
||||
}
|
||||
else if (code == "_CUC")
|
||||
{
|
||||
valore = ini_get_string(CONFIG_DITTA, "ef", "CUC");
|
||||
}
|
||||
else if (code == "_CREDITORID")
|
||||
{
|
||||
valore = ini_get_string(CONFIG_DITTA, "ef", "CREDITORID");
|
||||
}
|
||||
else if (code == "_CODMON")
|
||||
valore = cur.curr(-403).get("S4");
|
||||
} else if (code == "_CODMON")
|
||||
{
|
||||
valore.format("%c", _codice_moneta); // Fisso 'E'
|
||||
}
|
||||
@ -1355,7 +1384,8 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
|
||||
}
|
||||
else if (code == "_DATAMANDATO")
|
||||
{
|
||||
valore = "000000";
|
||||
const TDate d = data_mandato(cur.curr());
|
||||
valore = d.string(brief, '\0');
|
||||
}
|
||||
else
|
||||
NFCHECK("Macro non definita: %s", (const char *)code);
|
||||
|
@ -6,7 +6,7 @@
|
||||
#define F_DESCCAUINC 106
|
||||
#define F_DESCCAUPAG 107
|
||||
#define F_CONTSEP 108
|
||||
#define F_CREDITORID 109
|
||||
#define F_CUC 109
|
||||
|
||||
#define F_TRANS_G 111
|
||||
#define F_TRANS_C 112
|
||||
|
@ -148,15 +148,15 @@ END
|
||||
|
||||
STRING F_CODSIA 5
|
||||
BEGIN
|
||||
PROMPT 2 14 "Codice SIA "
|
||||
PROMPT 2 14 "Codice SIA "
|
||||
FLAGS "Z"
|
||||
FIELD CODSIA
|
||||
END
|
||||
|
||||
STRING F_CREDITORID 25
|
||||
STRING F_CUC 35
|
||||
BEGIN
|
||||
PROMPT 2 15 "Creditor Identifier "
|
||||
FIELD CREDITORID
|
||||
PROMPT 2 15 "Codice Univoco CBI (C.U.C.) "
|
||||
FIELD CUC
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -11,4 +11,5 @@ Item_05 = "Contabilizzazione effetti", "ef0 -7", "F"
|
||||
Item_06 = "Stampe di controllo", "ef0 -5", "F"
|
||||
Item_07 = "Configurazione modulo", "ef0 -8", "F"
|
||||
Item_08 = "Disposizioni incassi/pagamenti", "ef0 -9", "F"
|
||||
Item_09 = "Mandati RID", "ef0 -1 &MAN", "F"
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
31
|
||||
0
|
||||
$effetti|0|0|248|0|Effetti|||
|
||||
$effetti|0|0|283|0|Effetti|||
|
||||
|
@ -1,5 +1,5 @@
|
||||
31
|
||||
36
|
||||
37
|
||||
NPROGTR|3|7|0|Numero progressivo effetto
|
||||
DATASCAD|5|8|0|Data di scadenza
|
||||
TIPOPAG|2|1|0|Tipo pagamento
|
||||
@ -35,7 +35,8 @@ IBAN|1|34|0|Codice IBAN di appoggio
|
||||
DSCVAL|8|1|0|Data di scadenza intesa come data valuta beneficiario
|
||||
CUP|1|15|0|Codice Unico di Progetto
|
||||
CIG|1|10|0|Codice Identificativo gara
|
||||
CONTSEP|1|6|0|Contabilita' separata
|
||||
CONTSEP|1|6|0|Contabilità separata
|
||||
MANDATO|1|35|0|Codice mandato per RID
|
||||
4
|
||||
NPROGTR|
|
||||
TIPOCF+CODCF+NPROGTR|
|
||||
|
@ -65,7 +65,7 @@ POSITION(2)=3
|
||||
LENGTH(2)=5
|
||||
MESSAGE(2)=_CODSIA
|
||||
|
||||
NAME(3)=CODICE DESTINATARIO
|
||||
NAME(3)=CODICE RICEVENTE
|
||||
FIELD(3)=31->CODABIP
|
||||
POSITION(3)=8
|
||||
LENGTH(3)=5
|
||||
@ -86,7 +86,7 @@ MESSAGE(5)=_DITTA,!RAGSOC,1
|
||||
NAME(6)=FILLER
|
||||
TYPE(6)=FISSO
|
||||
POSITION(6)=45
|
||||
LENGTH(6)=68
|
||||
LENGTH(6)=67
|
||||
|
||||
NAME(7)=CODICE MONETA
|
||||
TYPE(7)=STRINGA
|
||||
@ -94,10 +94,11 @@ POSITION(7)=113
|
||||
LENGTH(7)=1
|
||||
MESSAGE(7) = _CODMON
|
||||
|
||||
NAME(8)=FILLER
|
||||
TYPE(8)=FISSO
|
||||
POSITION(8)=114
|
||||
LENGTH(8)=6
|
||||
NAME(8) = TIPO INCASSO RID (FACOLTATIVO)
|
||||
TYPE(8) = STRINGA
|
||||
POSITION(8) = 112
|
||||
LENGTH(8) = 1
|
||||
MESSAGE(8) = _TIPOINC
|
||||
|
||||
NAME(9)=TIPO RECORD FINTO
|
||||
POSITION(9)=1
|
||||
@ -190,6 +191,7 @@ POSITION(14) = 79
|
||||
LENGTH(14) = 12
|
||||
|
||||
NAME(15) = CODICE AZIENDA
|
||||
TYPE(15) = STRINGA
|
||||
POSITION(15) = 91
|
||||
LENGTH(15) = 5
|
||||
MESSAGE(15) = _CODSIA
|
||||
@ -201,20 +203,20 @@ LENGTH(16) = 1
|
||||
MESSAGE(16) = _FISSO,!9
|
||||
|
||||
NAME(17) = CODICE CLIENTE DEBITORE (FACOLTATIVO)
|
||||
TYPE(17) = FISSO
|
||||
TYPE(17) = STRINGA
|
||||
POSITION(17) = 97
|
||||
LENGTH(17) = 16
|
||||
LENGTH(17) = 15
|
||||
FIELD(17) = 20->PAIV
|
||||
|
||||
NAME(18) = TIPO INCASSO (FACOLTATIVO)
|
||||
TYPE(18) = STRINGA
|
||||
POSITION(18) = 112
|
||||
POSITION(18) = 118
|
||||
LENGTH(18) = 1
|
||||
MESSAGE(18) = _TIPOINC
|
||||
|
||||
NAME(19) = CODICE MONETA
|
||||
TYPE(19) = STRINGA
|
||||
POSITION(19) = 113
|
||||
POSITION(19) = 119
|
||||
LENGTH(19) = 1
|
||||
MESSAGE(19) = _CODMON
|
||||
|
||||
@ -567,13 +569,15 @@ TYPE(10)=FISSO
|
||||
POSITION(10)=89
|
||||
LENGTH(10)=24
|
||||
|
||||
NAME(11)=CODICE MONETA
|
||||
TYPE(11)=STRINGA
|
||||
POSITION(11)=113
|
||||
LENGTH(11)=1
|
||||
MESSAGE(11) = _CODMON
|
||||
NAME(11) = TIPO INCASSO (FACOLTATIVO)
|
||||
TYPE(11) = STRINGA
|
||||
POSITION(11) = 112
|
||||
LENGTH(11) = 1
|
||||
MESSAGE(11) = _TIPOINC
|
||||
|
||||
NAME(12)=CODICE MONETA
|
||||
TYPE(12)=STRINGA
|
||||
POSITION(12)=113
|
||||
LENGTH(12)=1
|
||||
MESSAGE(12) = _CODMON
|
||||
|
||||
NAME(12)=FILLER
|
||||
TYPE(12)=FISSO
|
||||
POSITION(12)=114
|
||||
LENGTH(12)=6
|
||||
|
Loading…
x
Reference in New Issue
Block a user