campo-sirio/ba/ba4300.cpp
alex f565fc1dc8 Patch level : 2.0 531
Files correlati     : Quelli delle patch 1.7
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione 1.7 A.G.A. e Partners alla patch 530


git-svn-id: svn://10.65.10.50/trunk@11331 c028cbd2-c16b-5b4b-a496-9718f37d4682
2003-07-22 13:22:11 +00:00

409 lines
9.8 KiB
C++
Executable File
Raw Blame History

#include <execp.h>
#include <golem.h>
#include <mailbox.h>
#include <prefix.h>
#include <recarray.h>
#include <relapp.h>
#include <tabutil.h>
#include <modaut.h>
#include <defmask.h>
#include "ba4.h"
#include "ba4300.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* CODDITTA = "CODDITTA";
const char* CODATTPREV = "CODATTPREV";
const char* TIPOA = "TIPOA";
const char* CODANAGR = "CODANAGR";
const char* CODATT = "CODATT";
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";
const char* CODULC = "CODULC";
const char* COMULC = "COMULC";
const char* INDULC = "INDULC";
const char* CIVULC = "CIVULC";
const char* CAPULC = "CAPULC";
const char* COMCCIAA = "COMCCIAA";
const char* COMTRIB = "COMTRIB";
#define TABATT "%ais"
#define CODTAB "CODTAB"
#define S0 "S0"
#define DESCR "DESCR"
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 fax_handler(TMask_field& f, KEY k);
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() : _cespiti(FALSE)
{}
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);
_cespiti = has_module(CEAUT);
_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 TString16 attprev(m.get(FLD_GD1_CODATTPREV));
if (_oldattprev == attprev)
return;
TRectype& ditte=_rel->curr();
TString codditta(ditte.get(CODDITTA)) ;
TLocalisamfile attiv(LF_ATTIV);
if (_oldattprev.not_empty())
{
attiv.put(CODDITTA, codditta) ;
attiv.put(CODATT, _oldattprev);
if (attiv.read(_isequal, _lock) == NOERR)
{
attiv.put("ATTPREV", bool(FALSE));
if (attiv.rewrite() != NOERR)
error_box(FR("Non posso aggiornare l'attivita' prevalente precedente : errore n. %d"), attiv.status());
}
}
attiv.zero() ;
attiv.put(CODDITTA, codditta) ;
attiv.put(CODATT, attprev) ;
const bool itwas = attiv.read(_isequal, _lock) == NOERR;
if (!itwas)
{
attiv.zero() ;
attiv.put(CODDITTA, codditta) ;
attiv.put(CODATT, attprev) ;
const TRectype& tabatt = cache().get(TABATT, ditte.get(CODATTPREV));
attiv.put(DESCR, tabatt.get(S0)) ;
}
attiv.put("ATTPREV", bool(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(CODDITTA, ditte.get(CODDITTA)) ;
unloc.put(CODULC, 1);
unloc.put(COMULC, anag.get(COMRES));
unloc.put(INDULC, anag.get(INDRES));
unloc.put(CIVULC, anag.get(CIVRES));
unloc.put(CAPULC, anag.get(CAPRES));
unloc.put(COMCCIAA, anag.get(COMRES));
unloc.put(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;
}