f8073f1e33
git-svn-id: svn://10.65.10.50/trunk@3263 c028cbd2-c16b-5b4b-a496-9718f37d4682
319 lines
7.1 KiB
C++
Executable File
319 lines
7.1 KiB
C++
Executable File
// 771300.cpp - Gestione quadro I e Prospetto dati generali
|
|
//
|
|
// 771mod -2 I - quadro I
|
|
// 771mod -2 W - prospetto dati generali
|
|
// 771mod -2 1 - quadro I dichiarante
|
|
// 771mod -2 2 - prospetto dati generali dichiarante
|
|
//
|
|
// 18.3.96 Aggiunto metodo per registrare flag in QCOMP
|
|
// NB se cambia numero quadri, modificare set_rel_field_quadri
|
|
//
|
|
#include <applicat.h>
|
|
#include <mask.h>
|
|
#include <msksheet.h>
|
|
#include <relapp.h>
|
|
#include <relation.h>
|
|
#include <tabutil.h>
|
|
#include <urldefid.h>
|
|
#include <config.h>
|
|
#include <utility.h>
|
|
#include <checks.h>
|
|
|
|
#include "771300.h"
|
|
#include "77lib.h"
|
|
|
|
HIDDEN const int QUADRI = 25;
|
|
// Corrispondenza tra posizione nel record (campo:QCOMP) e id della maschera
|
|
HIDDEN int _dlg_comp_array[QUADRI] = {
|
|
F_QCOMPA,
|
|
F_QCOMPA1,
|
|
F_QCOMPA2,
|
|
F_QCOMPA3,
|
|
F_QCOMPB,
|
|
F_QCOMPB1,
|
|
F_QCOMPC,
|
|
F_QCOMPD,
|
|
F_QCOMPD1,
|
|
F_QCOMPE,
|
|
F_QCOMPE1,
|
|
F_QCOMPE2,
|
|
F_QCOMPF,
|
|
F_QCOMPF1,
|
|
F_QCOMPF2,
|
|
F_QCOMPG,
|
|
F_QCOMPG1,
|
|
F_QCOMPH,
|
|
F_QCOMPI,
|
|
F_QCOMPN,
|
|
F_QCOMPP,
|
|
F_QCOMPQ,
|
|
F_QCOMPR,
|
|
F_QCOMPS,
|
|
F_QCOMPT
|
|
};
|
|
|
|
// Da id della maschera ritorna la corrispondente posizione in QCOMP
|
|
// Ritorna -1 se viene passato un id che non esiste in _dlg_array
|
|
HIDDEN int dlg2pos(const int dlg)
|
|
{
|
|
for (int i=0; i < QUADRI; i++)
|
|
if (_dlg_comp_array[i] == dlg)
|
|
return i;
|
|
return -1;
|
|
}
|
|
|
|
class TQuadroI : public TRelation_application
|
|
{
|
|
TRelation * _rel;
|
|
TMask * _msk;
|
|
char _quadro;
|
|
protected:
|
|
static bool PDGcalcolaM6(TMask_field& f, KEY k);
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
virtual TMask* get_mask(int mode);
|
|
virtual bool changing_mask(int mode) {return FALSE; }
|
|
virtual int read(TMask& m);
|
|
virtual void init_query_mode(TMask&);
|
|
virtual void init_modify_mode(TMask&);
|
|
virtual int write(const TMask& m);
|
|
virtual int rewrite(const TMask& m);
|
|
public:
|
|
void set_field_quadri(TMask& m);
|
|
void set_rel_field_quadri(const TMask& m);
|
|
void setta_ditta(TMask& m);
|
|
TQuadroI(char q) : _quadro(q) {}
|
|
};
|
|
|
|
HIDDEN TQuadroI& app() { return (TQuadroI&) main_app(); }
|
|
|
|
void TQuadroI::setta_ditta(TMask& m)
|
|
{
|
|
TString16 codditta; codditta << get_firm_770();
|
|
if (codditta != "0")
|
|
{
|
|
m.set(F_CODDITTA, codditta);
|
|
m.field(F_CODDITTA).check();
|
|
}
|
|
}
|
|
|
|
void TQuadroI::init_query_mode(TMask& m)
|
|
{
|
|
setta_ditta(m);
|
|
m.send_key(K_AUTO_ENTER,0);
|
|
}
|
|
|
|
void TQuadroI::init_modify_mode(TMask& m)
|
|
{
|
|
setta_ditta(m);
|
|
|
|
if (_quadro == 'W' || _quadro == '2')
|
|
{
|
|
TConfig conf(CONFIG_STUDIO);
|
|
int anno = (int) conf.get_long(ANNO_SEL);
|
|
m.set(F_ANNODIC, anno);
|
|
}
|
|
}
|
|
|
|
// Scrive i flag di q.comp. nella relazione
|
|
void TQuadroI::set_rel_field_quadri(const TMask& m)
|
|
{
|
|
int dlg, pos;
|
|
|
|
// NB Cambiare qui se cambia numero quadri
|
|
TString qcomp(QUADRI);
|
|
qcomp.spaces(QUADRI);
|
|
|
|
for (dlg=F_QCOMPA; dlg<=F_QCOMPT; dlg++)
|
|
{
|
|
pos = dlg2pos(dlg);
|
|
if (pos >= 0)
|
|
qcomp[pos] = m.get(dlg) == "X" ? 'X' : ' ';
|
|
}
|
|
_rel->curr().put("QCOMP", qcomp);
|
|
|
|
// Stessa cosa con flag quadri inviati
|
|
TString qsuppinv (QUADRI+1);
|
|
qsuppinv.spaces(QUADRI+1);
|
|
|
|
for (pos=0, dlg=F_QSUPPA; dlg<=F_QSUPPT; dlg++, pos++)
|
|
{
|
|
qsuppinv[pos] = m.get(dlg) == "X" ? 'X' : ' ';
|
|
}
|
|
_rel->curr().put("QSUPPINV", qsuppinv);
|
|
}
|
|
|
|
void TQuadroI::set_field_quadri(TMask& m)
|
|
{
|
|
int start_dlg = F_QCOMPA;
|
|
int dlg;
|
|
// La sequenza e' A A3 B B1..H I poi sotto A1 A2 N..T
|
|
TString qcomp (_rel->lfile().get("QCOMP"));
|
|
|
|
if (qcomp != "")
|
|
{
|
|
int lenght = qcomp.len();
|
|
for (int i = 0; i < lenght; i++)
|
|
{
|
|
if (qcomp[i] == 'X')
|
|
{
|
|
dlg = _dlg_comp_array[i];
|
|
m.set(dlg, "X");
|
|
}
|
|
}
|
|
}
|
|
|
|
TString suppinv (_rel->lfile().get("QSUPPINV"));
|
|
|
|
start_dlg = F_QSUPPA;
|
|
|
|
if (suppinv != "")
|
|
{
|
|
int lenght = suppinv.len();
|
|
for (int i = 0; i < lenght; i++)
|
|
if (suppinv[i] == 'X')
|
|
{
|
|
dlg = start_dlg + i;
|
|
m.set(dlg, "X");
|
|
}
|
|
}
|
|
}
|
|
|
|
TMask* TQuadroI::get_mask(int mode)
|
|
{
|
|
return _msk;
|
|
}
|
|
|
|
int TQuadroI::read(TMask& m)
|
|
{
|
|
m.autoload(_rel);
|
|
// Si posiziona sul record del dichiarante, e se non esiste lo crea
|
|
if (_quadro == '1' || _quadro == '2')
|
|
{
|
|
TString16 dep; dep << COD_QUA_I_DIC;
|
|
m.set(F_TIPOQUA1, dep);
|
|
if (_quadro == '1')
|
|
m.set(F_TIPOQUA2, dep);
|
|
_rel->curr().put("TIPOQUA", COD_QUA_I_DIC);
|
|
const int err = _rel->read();
|
|
if (err != NOERR)
|
|
enter_dichiar_770(get_firm_770(), anno_770(), TRUE);
|
|
|
|
m.autoload(_rel);
|
|
}
|
|
|
|
// Setta i flag di quadro compilato nel prospetto dai generali
|
|
if (_quadro == 'W' || _quadro == '2')
|
|
set_field_quadri(m);
|
|
|
|
return NOERR;
|
|
}
|
|
|
|
bool TQuadroI::PDGcalcolaM6(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_TAB)
|
|
{
|
|
TMask& m = f.mask();
|
|
real m3 = m.get_real(F_M3);
|
|
real m4 = m.get_real(F_M4);
|
|
real m5 = m.get_real(F_M5);
|
|
real m6 = m3 - m4 - m5;
|
|
if (m6 < ZERO)
|
|
m6 = ZERO;
|
|
TString m6s(m6.string());
|
|
m.set(F_M6, m6s);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroI::user_create()
|
|
{
|
|
switch (_quadro)
|
|
{
|
|
case '1':
|
|
_rel = new TRelation (LF_BASE);
|
|
_rel->add(LF_BASEBIS,"TIPOQUA=\"D\"&&CODDITTA=CODDITTA",1);
|
|
_msk = new TMask("771300a");
|
|
break;
|
|
case 'I':
|
|
_rel = new TRelation (LF_BASE);
|
|
_rel->add(LF_BASEBIS,"CODDITTA=CODDITTA",1);
|
|
_msk = new TMask("771300a");
|
|
break;
|
|
case 'W':
|
|
_msk = new TMask("771400a");
|
|
_msk->set_handler(F_M3, PDGcalcolaM6);
|
|
_msk->set_handler(F_M4, PDGcalcolaM6);
|
|
_msk->set_handler(F_M5, PDGcalcolaM6);
|
|
_rel = new TRelation (LF_BASEBIS);
|
|
break;
|
|
case '2':
|
|
_msk = new TMask("771400b");
|
|
_rel = new TRelation (LF_BASEBIS);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroI::user_destroy()
|
|
{
|
|
delete _msk;
|
|
delete _rel;
|
|
return TRUE;
|
|
}
|
|
|
|
int TQuadroI::write(const TMask& m)
|
|
{
|
|
TRelation *r = get_relation();
|
|
m.autosave(r);
|
|
// Setta i flag di quadro compilato nel prospetto dai generali nella relazione
|
|
if (_quadro == 'W' || _quadro == '2')
|
|
set_rel_field_quadri(m);
|
|
r->write();
|
|
return r->status();
|
|
}
|
|
|
|
|
|
int TQuadroI::rewrite(const TMask& m)
|
|
{
|
|
TRelation *r = get_relation();
|
|
m.autosave(r);
|
|
// Setta i flag di quadro compilato nel prospetto dai generali nella relazione
|
|
if (_quadro == 'W' || _quadro == '2')
|
|
set_rel_field_quadri(m);
|
|
r->rewrite();
|
|
return r->status();
|
|
}
|
|
|
|
int m71300(int argc, char* argv[])
|
|
{
|
|
if (argc < 3)
|
|
return -1;
|
|
|
|
char* title = NULL;
|
|
char quadro = toupper(*argv[2]);
|
|
TQuadroI a (quadro);
|
|
|
|
switch (quadro)
|
|
{
|
|
case 'I':
|
|
case '1':
|
|
title = "Gestione quadro I";
|
|
break;
|
|
case 'W':
|
|
case '2':
|
|
title = "Prospetto dati generali";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
a.run(argc, argv, title);
|
|
return 0;
|
|
}
|
|
|
|
|