3f9094fdb5
Files correlati : ba3.exe ba4.exe batbcam.msk Ricompilazione Demo : [ ] Commento : GF20058 Nonostante la tabella dei cambi giornalieri abbia per la valuta x per il gg y la spunta di contro euro quando seleziono quella valuta la spunta di contro euro non c'è, cosa strana è che se dal documento vado in gestione del cambio giornaliero anche lì non appare mentre nei cambi giornalieri delle tabelle contabili si. PGxxxxx Creando una nuova ditta, la relativa attivita' prevalente e priva di descrizione git-svn-id: svn://10.65.10.50/trunk@11344 c028cbd2-c16b-5b4b-a496-9718f37d4682
394 lines
9.4 KiB
C++
Executable File
394 lines
9.4 KiB
C++
Executable File
#include <defmask.h>
|
||
#include <execp.h>
|
||
#include <golem.h>
|
||
#include <mailbox.h>
|
||
#include <prefix.h>
|
||
#include <recarray.h>
|
||
#include <relapp.h>
|
||
#include <tabutil.h>
|
||
|
||
#include "ba4.h"
|
||
#include "ba4300.h"
|
||
|
||
#include <attiv.h>
|
||
#include <nditte.h>
|
||
#include <unloc.h>
|
||
|
||
#define FLD_UL1_CODDITTA 133
|
||
#define FLD_UL1_CODDITTA_NDITTE_RAGSOC 100
|
||
#define FLD_AT1_CODDITTA 102
|
||
#define FLD_AT1_CODATTH 199
|
||
#define FLD_AT1_PROGD_NDITTE_RAGSOC 105
|
||
#define FLD_SC1_CODDITTA 143
|
||
#define FLD_SC1_CODANAGRSOH 147
|
||
#define FLD_SC1_CODDITTA_NDITTE_RAGSOC 144
|
||
#define FLD_UL1_CODULC 125
|
||
#define F_CODDITTA 142
|
||
#define F_ANNO 132
|
||
|
||
const char* TIPOA = "TIPOA";
|
||
const char* CODANAGR = "CODANAGR";
|
||
|
||
const char* COMRF = "COMRF";
|
||
const char* INDRF = "INDRF";
|
||
const char* CIVRF = "CIVRF";
|
||
const char* CAPRF = "CAPRF";
|
||
const char* COMRES = "COMRES";
|
||
const char* INDRES = "INDRES";
|
||
const char* CIVRES = "CIVRES";
|
||
const char* CAPRES = "CAPRES";
|
||
|
||
#define TABATT "%AIS"
|
||
#define CODTAB "CODTAB"
|
||
#define S0 "S0"
|
||
|
||
class TDitte_application : public TRelation_application
|
||
{
|
||
TMask* _msk;
|
||
TRelation *_rel;
|
||
TString16 _oldattprev;
|
||
|
||
protected:
|
||
bool user_create() ;
|
||
bool user_destroy() ;
|
||
virtual TMask* get_mask(int) { return _msk;}
|
||
virtual bool changing_mask(int) { return FALSE;}
|
||
virtual void init_query_mode(TMask& m) ;
|
||
virtual void init_insert_mode(TMask& m) ;
|
||
void enable_reg(TMask& m) ;
|
||
virtual void init_modify_mode(TMask& m) ;
|
||
virtual bool protected_record(TRectype& rec) { return prefix().exist(rec.get_long("CODDITTA")); }
|
||
void set_att_prev(const TMask& m);
|
||
|
||
static bool email_handler(TMask_field& f, KEY k);
|
||
|
||
public:
|
||
TDitte_application();
|
||
virtual TRelation* get_relation() const { return _rel;}
|
||
virtual int rewrite(const TMask& m);
|
||
virtual int write(const TMask& m);
|
||
virtual bool remove();
|
||
virtual ~TDitte_application() {}
|
||
};
|
||
|
||
bool ba4300_handler(TMask& m, KEY k)
|
||
|
||
{
|
||
TDitte_application& app = (TDitte_application&)main_app();
|
||
|
||
if (k == (K_SHIFT+K_F12) && m.mode() == MODE_MOD)
|
||
{
|
||
m.enable(FLD_GD1_TIPOA);
|
||
m.enable(FLD_GD1_CODANAGR);
|
||
m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC);
|
||
return TRUE;
|
||
}
|
||
|
||
if (k == (K_SHIFT+K_F7) && m.mode() == MODE_MOD)
|
||
{
|
||
m.enable(FLD_GD1_VALUTA);
|
||
return TRUE;
|
||
}
|
||
if (k != K_F5 && k != K_F6 && k != K_F7 && k != K_F8 && k != K_F3)
|
||
return TRUE;
|
||
if (m.mode() == MODE_MOD || m.mode() == MODE_INS)
|
||
{
|
||
if (m.mode() == MODE_INS)
|
||
{
|
||
if (!m.check_fields()) return FALSE;
|
||
if (app.write(m) != NOERR) return TRUE;
|
||
m.stop_run(K_ESC);
|
||
}
|
||
TString appname;
|
||
int fld = 0, fld1 = 0, fldbrowse = 0;
|
||
|
||
if (k == K_F5)
|
||
{
|
||
appname = "ba4 -3";
|
||
fld = FLD_UL1_CODDITTA;
|
||
fld1 = FLD_UL1_CODDITTA_NDITTE_RAGSOC;
|
||
fldbrowse = FLD_UL1_CODULC;
|
||
}
|
||
if (k == K_F6)
|
||
{
|
||
appname = "ba4 -4";
|
||
fld = FLD_AT1_CODDITTA;
|
||
fld1 = FLD_AT1_PROGD_NDITTE_RAGSOC;
|
||
fldbrowse = FLD_AT1_CODATTH;
|
||
}
|
||
if (k == K_F7)
|
||
{
|
||
appname = "ba4 -5";
|
||
fld = FLD_SC1_CODDITTA;
|
||
fld1 = FLD_SC1_CODDITTA_NDITTE_RAGSOC;
|
||
fldbrowse = FLD_SC1_CODANAGRSOH;
|
||
}
|
||
if (k == K_F8) { appname = "ba3 -0 reg"; fld = 0;fldbrowse = 0;}
|
||
if (k == K_F3) { appname = "ba5 -1"; fld = F_CODDITTA;fldbrowse = F_ANNO;}
|
||
if (appname.not_empty())
|
||
{
|
||
TString body(16);
|
||
|
||
if (fldbrowse)
|
||
body << fldbrowse << "|";
|
||
if (fld)
|
||
body << fld << "=" << m.get(FLD_GD1_CODDITTA) ;
|
||
if (fld1)
|
||
body << "|" << fld1 << "=" ;
|
||
if (fldbrowse || fld)
|
||
{
|
||
TMessage msg(appname, MSG_FS, body);
|
||
|
||
TMailbox mb;
|
||
mb.send(msg);
|
||
}
|
||
TExternal_app a(appname);
|
||
const long oldditta = main_app().get_firm();
|
||
if (k == K_F8) main_app().set_firm(m.get_long(FLD_GD1_CODDITTA));
|
||
a.run();
|
||
if (k == K_F8) main_app().set_firm(oldditta);
|
||
m.set_focus();
|
||
return FALSE;
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
TDitte_application::TDitte_application()
|
||
{}
|
||
|
||
bool TDitte_application::email_handler(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_SPACE)
|
||
{
|
||
const TMask& m = f.mask();
|
||
TToken_string key;
|
||
key.add(m.get(FLD_GD1_TIPOA));
|
||
key.add(m.get(FLD_GD1_CODANAGR));
|
||
const TRectype& anag = cache().get(LF_ANAG, key);
|
||
TMail_message msg(anag.get("MAIL"));
|
||
msg.send();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TDitte_application::user_create() // initvar e arrmask
|
||
{
|
||
open_files(LF_NDITTE, LF_ANAG, LF_UNLOC, LF_ATTIV, LF_TABCOM, 0);
|
||
_rel = new TRelation(LF_NDITTE);
|
||
|
||
_msk = new TMask("ba4300a") ;
|
||
_msk->set_handler(ba4300_handler);
|
||
_msk->set_handler(DLG_EMAIL, email_handler);
|
||
|
||
|
||
set_search_field(FLD_GD1_CODDITTA);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
bool TDitte_application::user_destroy() // releasev e arrmask
|
||
{
|
||
delete _msk;
|
||
delete _rel;
|
||
return TRUE;
|
||
}
|
||
|
||
void TDitte_application::set_att_prev(const TMask& m)
|
||
{
|
||
const TString& attprev = m.get(FLD_GD1_CODATTPREV);
|
||
if (_oldattprev == attprev)
|
||
return;
|
||
|
||
TRectype& ditte=_rel->curr();
|
||
const long codditta = ditte.get_long(ATT_CODDITTA);
|
||
|
||
TLocalisamfile attiv(LF_ATTIV);
|
||
if (_oldattprev.not_empty())
|
||
{
|
||
attiv.put(ATT_CODDITTA, codditta) ;
|
||
attiv.put(ATT_CODATT, _oldattprev);
|
||
if (attiv.read(_isequal, _lock) == NOERR)
|
||
{
|
||
attiv.put(ATT_ATTPREV, false);
|
||
if (attiv.rewrite() != NOERR)
|
||
error_box(FR("Non posso aggiornare l'attivita' prevalente precedente : errore n. %d"), attiv.status());
|
||
}
|
||
}
|
||
attiv.zero() ;
|
||
attiv.put(ATT_CODDITTA, codditta) ;
|
||
attiv.put(ATT_CODATT, attprev) ;
|
||
|
||
const bool itwas = attiv.read(_isequal, _lock) == NOERR;
|
||
if (!itwas)
|
||
{
|
||
attiv.zero() ;
|
||
attiv.put(ATT_CODDITTA, codditta) ;
|
||
attiv.put(ATT_CODATT, attprev) ;
|
||
|
||
const TRectype& tabatt = cache().get(TABATT, ditte.get(NDT_CODATTPREV));
|
||
attiv.put(ATT_DESCR, tabatt.get(S0)) ;
|
||
}
|
||
attiv.put(ATT_ATTPREV, true);
|
||
if (itwas)
|
||
{
|
||
if (attiv.rewrite() != NOERR)
|
||
error_box(FR("Impossibile aggiornare l'attivita' prevalente : errore n. %d"), attiv.status());
|
||
}
|
||
else
|
||
{
|
||
if (attiv.write() != NOERR)
|
||
error_box(FR("Impossibile creare l'attivita' prevalente : errore n. %d"), attiv.status());
|
||
}
|
||
}
|
||
|
||
int TDitte_application::write(const TMask& m)
|
||
{
|
||
const int err = TRelation_application::write(m);
|
||
|
||
if (err == NOERR)
|
||
{
|
||
set_att_prev(m);
|
||
|
||
TLocalisamfile anag(LF_ANAG);
|
||
const TRectype& ditte = _rel->curr();
|
||
|
||
anag.zero() ;
|
||
anag.put(TIPOA, ditte.get(TIPOA));
|
||
anag.put(CODANAGR, ditte.get(CODANAGR));
|
||
if (anag.read() == NOERR)
|
||
{
|
||
TLocalisamfile unloc(LF_UNLOC);
|
||
unloc.put(ULC_CODDITTA, ditte.get(ATT_CODDITTA)) ;
|
||
unloc.put(ULC_CODULC, 1);
|
||
unloc.put(ULC_COMULC, anag.get(COMRES));
|
||
unloc.put(ULC_INDULC, anag.get(INDRES));
|
||
unloc.put(ULC_CIVULC, anag.get(CIVRES));
|
||
unloc.put(ULC_CAPULC, anag.get(CAPRES));
|
||
unloc.put(ULC_COMCCIAA, anag.get(COMRES));
|
||
unloc.put(ULC_COMTRIB, anag.get(COMRES));
|
||
unloc.write();
|
||
}
|
||
}
|
||
return err;
|
||
}
|
||
|
||
int TDitte_application::rewrite(const TMask& m)
|
||
{
|
||
const int err = TRelation_application::rewrite(m);
|
||
if (err == NOERR)
|
||
set_att_prev(m);
|
||
return err;
|
||
}
|
||
|
||
bool TDitte_application::remove()
|
||
{
|
||
// Removes all activities
|
||
const long firm = _msk->get_long(FLD_GD1_CODDITTA);
|
||
TLocalisamfile attiv(LF_ATTIV);
|
||
TRecfield att_firm(attiv.curr(),"CODDITTA");
|
||
|
||
att_firm = firm;
|
||
for (attiv.read(_isgteq); attiv.good() && firm == (long)att_firm; attiv.next())
|
||
attiv.remove();
|
||
// Removes firm
|
||
return TRelation_application::remove();
|
||
}
|
||
|
||
void TDitte_application::init_query_mode(TMask& m)
|
||
{
|
||
if (filtered())
|
||
{
|
||
m.show(FLD_GD1_CODDITTAH);
|
||
m.show(FLD_GD1_RAGSOCH);
|
||
m.hide(FLD_GD1_CODDITTA);
|
||
m.hide(FLD_GD1_RAGSOC);
|
||
}
|
||
else
|
||
{
|
||
m.show(FLD_GD1_CODDITTA);
|
||
m.show(FLD_GD1_RAGSOC);
|
||
m.hide(FLD_GD1_CODDITTAH);
|
||
m.hide(FLD_GD1_RAGSOCH);
|
||
}
|
||
init_insert_mode(m);
|
||
}
|
||
|
||
void TDitte_application::init_insert_mode(TMask& m)
|
||
{
|
||
if (!filtered())
|
||
{
|
||
m.enable(FLD_GD1_TIPOA);
|
||
m.enable(FLD_GD1_CODANAGR);
|
||
m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC);
|
||
m.show(FLD_GD1_CODDITTA);
|
||
m.show(FLD_GD1_RAGSOC);
|
||
m.hide(FLD_GD1_CODDITTAH);
|
||
m.hide(FLD_GD1_RAGSOCH);
|
||
}
|
||
else
|
||
{
|
||
m.show(FLD_GD1_CODDITTAH);
|
||
m.show(FLD_GD1_RAGSOCH);
|
||
m.hide(FLD_GD1_CODDITTA);
|
||
m.hide(FLD_GD1_RAGSOC);
|
||
}
|
||
m.disable(DLG_ATT);
|
||
m.disable(DLG_ULC);
|
||
m.disable(DLG_SOC);
|
||
m.disable(DLG_REG);
|
||
_oldattprev = "";
|
||
|
||
// La valuta si decide gi<67> in creazione: la valuta della prima ditta memorizzata
|
||
TEdit_field& val = m.efield(FLD_GD1_VALUTA);
|
||
TLocalisamfile& ditte = get_relation()->lfile();
|
||
if (ditte.first() == NOERR)
|
||
{
|
||
val.set(ditte.get("VALUTA"));
|
||
val.disable();
|
||
}
|
||
else
|
||
val.enable();
|
||
}
|
||
|
||
void TDitte_application::enable_reg(TMask& m)
|
||
{
|
||
const long codditta = m.get_long(FLD_GD1_CODDITTA);
|
||
m.enable(DLG_REG, prefix().exist(codditta));
|
||
}
|
||
|
||
void TDitte_application::init_modify_mode(TMask& m)
|
||
{
|
||
m.disable(FLD_GD1_TIPOA);
|
||
m.disable(FLD_GD1_CODANAGR);
|
||
m.disable(FLD_GD1_CODANAGR_ANAGR_RAGSOC);
|
||
m.disable(FLD_GD1_VALUTA); // La valuta si decide solo in creazione
|
||
if (filtered())
|
||
{
|
||
m.show(FLD_GD1_CODDITTAH);
|
||
m.show(FLD_GD1_RAGSOCH);
|
||
m.hide(FLD_GD1_RAGSOC);
|
||
m.hide(FLD_GD1_CODDITTA);
|
||
}
|
||
else
|
||
{
|
||
m.show(FLD_GD1_CODDITTA);
|
||
m.show(FLD_GD1_RAGSOC);
|
||
m.hide(FLD_GD1_CODDITTAH);
|
||
m.hide(FLD_GD1_RAGSOCH);
|
||
}
|
||
m.enable(DLG_ATT);
|
||
m.enable(DLG_ULC);
|
||
m.enable(DLG_SOC);
|
||
enable_reg(m);
|
||
_oldattprev = m.get(FLD_GD1_CODATTPREV);
|
||
}
|
||
|
||
int ba4300(int argc, char* argv[])
|
||
{
|
||
TDitte_application a ;
|
||
a.run(argc, argv, TR("Anagrafica Ditte"));
|
||
return 0;
|
||
}
|