11b36f4bf2
Files correlati : cg0.exe cg2.exe cg3.exe cg3700a.msk Ricompilazione Demo : [ ] Commento : CM20023 Se apro la ricerca sul tipo costo ricavo della riga Iva e poi dall'help richiamo le informazioni e do conferma, riaprendo la ricerca sul campo tipo costo ricavo l'applicazione va in errore. CM20024 Se i campi delle date sono di compilazione obbligatoria devono avere il colore giallo. CM20025 Richiamando gruppo conto appartenete ai costi appare il campo della sola descrizione del codice iva di compensazione. Ricordo che il campo del codice e della descrizione per la compensazione devono apparire solo nel caso in cui venga richiamato un sottoconto di tipo ricavo. CM20027 I totali attuali in presenza di movimenti provvisori non sono corretti in quanto non vengono inclusi. I movimenti appartengono tutti all'anno 2002. git-svn-id: svn://10.65.10.50/trunk@11112 c028cbd2-c16b-5b4b-a496-9718f37d4682
386 lines
10 KiB
C++
Executable File
386 lines
10 KiB
C++
Executable File
#include <recarray.h>
|
|
#include <relapp.h>
|
|
#include <defmask.h>
|
|
|
|
#include "cg0.h"
|
|
#include "cg0100.h"
|
|
|
|
#include <pconti.h>
|
|
#include <saldi.h>
|
|
|
|
#define ATTIVITA 1
|
|
#define PASSIVITA 2
|
|
#define COSTI 3
|
|
#define RICAVI 4
|
|
#define ORDINE 5
|
|
|
|
class TCausali_app : public TRelation_application
|
|
{
|
|
TMask* _msk;
|
|
TRelation *_rel;
|
|
bool _pcon_com;
|
|
|
|
bool user_create();
|
|
bool user_destroy();
|
|
virtual TMask* get_mask(int mode) {return _msk;}
|
|
virtual bool changing_mask(int mode) {return FALSE;}
|
|
virtual bool protected_record(TRectype &rec);
|
|
virtual void init_query_mode(TMask& m);
|
|
virtual void init_insert_mode(TMask& m);
|
|
virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
|
|
virtual int write(const TMask& m);
|
|
virtual int rewrite(const TMask & m);
|
|
virtual int read(TMask& m);
|
|
virtual void on_firm_change();
|
|
|
|
public:
|
|
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
|
|
virtual bool check_autorization() const
|
|
{return FALSE;}
|
|
virtual TRelation* get_relation() const {return _rel;}
|
|
TCausali_app() : _pcon_com(FALSE) {}
|
|
};
|
|
HIDDEN inline TCausali_app & app() { return (TCausali_app &) main_app();}
|
|
|
|
|
|
int TCausali_app::read(TMask& m)
|
|
|
|
{
|
|
const TRelation *r = get_relation();
|
|
m.autoload(*r);
|
|
if (m.get(FLD_CM1_LETTIVD).empty())
|
|
{
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
if (sezivd == 1 || sezivd == 2)
|
|
m.set(FLD_CM1_SEZIVD, sezivd + 5);
|
|
}
|
|
if (m.get(FLD_CM1_LETTIVDOPP).empty())
|
|
{
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 1 || sezivd == 2)
|
|
m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
|
|
}
|
|
return NOERR;
|
|
}
|
|
|
|
int TCausali_app::rewrite(const TMask& m)
|
|
{
|
|
TString16 sez;
|
|
|
|
TRelation *r = get_relation();
|
|
m.autosave(*r);
|
|
|
|
if (!m.field(FLD_CM1_CODTABANALISI).enabled())
|
|
r->curr().zero(PCN_CODCBL);
|
|
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVD, sez);
|
|
}
|
|
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVDOPP, sez);
|
|
}
|
|
const int err = r->rewrite();
|
|
return err;
|
|
}
|
|
|
|
int TCausali_app::write(const TMask& m)
|
|
{
|
|
TString16 sez;
|
|
|
|
TRelation *r = get_relation();
|
|
m.autosave(*r);
|
|
|
|
if (!m.field(FLD_CM1_CODTABANALISI).enabled())
|
|
r->curr().zero(PCN_CODCBL);
|
|
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVD, sez);
|
|
}
|
|
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVDOPP, sez);
|
|
}
|
|
|
|
return r->write();
|
|
}
|
|
|
|
// Controlla se puo' essere effettuata la cancellazione di un conto
|
|
void TCausali_app::on_firm_change()
|
|
{
|
|
TDir d;
|
|
d.get(LF_PCON, _nolock, _nordir, _sysdirop);
|
|
_pcon_com = d.is_com();
|
|
}
|
|
|
|
bool TCausali_app::protected_record(TRectype &rec)
|
|
{
|
|
if (!_pcon_com )
|
|
{
|
|
TMask* m = get_mask(MODE_MOD);
|
|
const int gruppo = m->get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m->get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m->get_long(FLD_CM1_SOTTOCONTO);
|
|
|
|
// Se e' un sottoconto posso cancellarlo se non esistono saldi
|
|
if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
|
|
{
|
|
TLocalisamfile saldi(LF_SALDI);
|
|
|
|
saldi.setkey(2);
|
|
saldi.put(PCN_GRUPPO, gruppo);
|
|
saldi.put(PCN_CONTO, conto);
|
|
saldi.put(PCN_SOTTOCONTO, sottoc);
|
|
saldi.read(_isgteq);
|
|
return saldi.good() &&
|
|
gruppo == saldi.get_int(PCN_GRUPPO) && conto == saldi.get_int(PCN_CONTO) && sottoc == saldi.get_long(PCN_SOTTOCONTO) &&
|
|
(saldi.get_real(SLD_SALDO) != ZERO || saldi.get_real(SLD_PDARE) != ZERO ||
|
|
saldi.get_real(SLD_PAVERE) != ZERO || saldi.get_real(SLD_SALDOFIN) != ZERO ||
|
|
saldi.get_real(SLD_PDAREPRO) != ZERO || saldi.get_real(SLD_PAVEREPRO) != ZERO);
|
|
}
|
|
else
|
|
{
|
|
TLocalisamfile& pconti = _rel->lfile();
|
|
|
|
get_relation()->save_status();
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo);
|
|
// Se e' un conto controllo se ha dei sottoconti
|
|
if (conto != 0)
|
|
pconti.put(PCN_CONTO, conto);
|
|
TRectype rec1(pconti.curr());
|
|
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
pconti.next();
|
|
bool prot = (pconti.good() && (pconti.curr() == rec1));
|
|
get_relation()->restore_status();
|
|
return prot;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void TCausali_app::init_query_mode(TMask& m)
|
|
{
|
|
m.show_default();
|
|
m.hide(-3);
|
|
}
|
|
|
|
HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
|
|
{
|
|
if (f.active() && key == K_SPACE)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int conto = atoi(m.get(FLD_CM1_CONTO));
|
|
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
|
|
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
|
|
|
|
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void TCausali_app::init_insert_mode(TMask& m)
|
|
{
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
bool ivd_enable = TRUE;
|
|
|
|
m.show_default();
|
|
if (conto == 0 && sottoc == 0)
|
|
m.hide(-1);
|
|
else
|
|
if (sottoc == 0)
|
|
m.hide(-2);
|
|
else
|
|
m.hide(-3);
|
|
|
|
TString s, s2, s5;
|
|
TString8 s3, s4;
|
|
int s1 = 0;
|
|
int indbil = 0;
|
|
|
|
if (sottoc != 0)
|
|
{
|
|
TToken_string key; key.add(gruppo); key.add(conto);
|
|
const TRectype& pconti = cache().get(LF_PCON, key);
|
|
if (!pconti.empty())
|
|
{
|
|
s = pconti.get(PCN_CODCBL);
|
|
s1 = pconti.get_int(PCN_SEZIVD);
|
|
s2 = pconti.get(PCN_LETTIVD);
|
|
s3 = pconti.get(PCN_NUMRIVD);
|
|
s4 = pconti.get(PCN_NUMIVD);
|
|
if (s3.empty())
|
|
s3 = " ";
|
|
else
|
|
s3.right_just(4,'0');
|
|
|
|
if (!s4.empty())
|
|
s4.right_just(2,'0');
|
|
|
|
key.format("%1d%1s%s%s", s1, (const char*) s2,(const char*) s3, (const char*) s4);
|
|
s5 = cache().get("%IVD", key, "S0"); //
|
|
indbil = pconti.get_int(PCN_INDBIL);
|
|
}
|
|
ivd_enable = (s1 == 0) && s2.empty() && s3.empty() && s4.empty();
|
|
m.show(FLD_CM1_IVACOMP, indbil == RICAVI);
|
|
m.show(FLD_CM1_DESCIVACOMP, indbil == RICAVI);
|
|
}
|
|
m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI);
|
|
if (conto != 0)
|
|
{
|
|
m.enable(FLD_CM1_SEZIVD, ivd_enable);
|
|
m.show(FLD_CM1_LETTIVD, ivd_enable);
|
|
m.show(FLD_CM1_NUMRIVD, ivd_enable);
|
|
m.show(FLD_CM1_NUMIVD, ivd_enable);
|
|
m.show(FLD_CM1_DESCIVD, ivd_enable); //
|
|
if (!ivd_enable)
|
|
{
|
|
m.set(FLD_CM1_SEZIVD, s1);
|
|
m.set(FLD_CM1_LETTIVDH, s2);
|
|
m.set(FLD_CM1_NUMRIVDH, s3);
|
|
m.set(FLD_CM1_NUMIVDH, s4);
|
|
m.set(FLD_CM1_DESCIVDH, s5); //
|
|
m.enable(FLD_CM1_SEZIVDOPP);
|
|
m.disable(FLD_CM1_LETTIVDH);
|
|
m.disable(FLD_CM1_NUMRIVDH);
|
|
m.disable(FLD_CM1_NUMIVDH);
|
|
m.disable(FLD_CM1_DESCIVDH); //
|
|
}
|
|
m.show(FLD_CM1_LETTIVDH, !ivd_enable);
|
|
m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
|
|
m.show(FLD_CM1_NUMIVDH, !ivd_enable);
|
|
m.show(FLD_CM1_DESCIVDH, !ivd_enable); //
|
|
|
|
if (s.empty())
|
|
{
|
|
TToken_string key; key.add(gruppo);
|
|
const TRectype& pconti = cache().get(LF_PCON, key);
|
|
s = pconti.get(PCN_CODCBL);
|
|
}
|
|
}
|
|
if (s.not_empty())
|
|
{
|
|
m.set(FLD_CM1_CODTABANALISI, s);
|
|
m.check_field(FLD_CM1_CODTABANALISI);
|
|
m.disable(FLD_CM1_CODTABANALISI);
|
|
m.disable(FLD_CM1_DESCRANALISI);
|
|
}
|
|
else
|
|
{
|
|
m.enable(FLD_CM1_CODTABANALISI);
|
|
m.enable(FLD_CM1_DESCRANALISI);
|
|
}
|
|
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
|
|
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
|
|
}
|
|
|
|
|
|
HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
|
|
if (key == K_ENTER)
|
|
{
|
|
TLocalisamfile& pconti = app().get_relation()->lfile();
|
|
if (gruppo != 0 && conto != 0)
|
|
{
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
if (pconti.bad())
|
|
return f.warning_box (TR("Il gruppo non esiste"));
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
HIDDEN bool conto_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
|
|
if (key == K_ENTER)
|
|
{
|
|
TLocalisamfile& pconti = app().get_relation()->lfile();
|
|
|
|
if (gruppo != 0 && conto != 0 && sottoc != 0)
|
|
{
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.put(PCN_CONTO, conto) ;
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
if (pconti.bad())
|
|
return m.field(FLD_CM1_CONTO).warning_box (TR("Il conto non esiste"));
|
|
else
|
|
{
|
|
if (pconti.get(PCN_TMCF).not_empty())
|
|
return m.field(FLD_CM1_SOTTOCONTO).warning_box (TR("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore"));
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
if (m.query_mode() && key == K_TAB)
|
|
{
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
if (gruppo == 0) return TRUE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TCausali_app::user_create()
|
|
{
|
|
open_files(LF_PCON, LF_SALDI, LF_TABCOM, LF_ABPCON, 0);
|
|
|
|
_msk = new TMask("cg0100a") ;
|
|
_msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
|
|
_msk->set_handler(FLD_CM1_CONTO, conto_handler);
|
|
_msk->set_handler(FLD_CM1_SOTTOCONTO, sottoc_handler);
|
|
_msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
|
|
_rel = new TRelation(LF_PCON);
|
|
set_search_field(FH_SOTTOCONTO);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TCausali_app::user_destroy()
|
|
{
|
|
delete _msk;
|
|
delete _rel;
|
|
return TRUE;
|
|
}
|
|
|
|
int cg0100(int argc, char* argv[])
|
|
{
|
|
TCausali_app a ;
|
|
a.run(argc, argv, TR("Piano dei conti"));
|
|
return 0;
|
|
} |