0f924bdd96
git-svn-id: svn://10.65.10.50/trunk@4514 c028cbd2-c16b-5b4b-a496-9718f37d4682
409 lines
8.7 KiB
C++
Executable File
409 lines
8.7 KiB
C++
Executable File
// 771232.cpp - Quadri G
|
|
#include <relapp.h>
|
|
#include <config.h>
|
|
#include <msksheet.h>
|
|
#include <sort.h>
|
|
#include <tabutil.h>
|
|
#include <execp.h>
|
|
#include <progind.h>
|
|
#include <defmask.h>
|
|
|
|
#include "quadrog.h"
|
|
#include "quadrogp.h"
|
|
#include "77lib.h"
|
|
#include "774200.h"
|
|
#include "771234a.h" // G
|
|
#include "771232.h"
|
|
|
|
|
|
// Aliquote prospetti 2 (I e II)
|
|
HIDDEN const char* aliq[8] =
|
|
{
|
|
"10",
|
|
"10",
|
|
"12.50",
|
|
"12.50",
|
|
"15",
|
|
"15",
|
|
"34.40",
|
|
"34.40"
|
|
};
|
|
|
|
HIDDEN const int RIGHE_P1_I = 3;
|
|
HIDDEN const int RIGHE_P1_II = 3;
|
|
HIDDEN const int RIGHE_P2_I = 20;
|
|
HIDDEN const int RIGHE_P2_II = 20;
|
|
HIDDEN const char* DISTINTA_APP = "771mod -6 4";
|
|
|
|
#define AMM_AZ 102
|
|
#define NUM_AZ 103
|
|
#define AMM_COMP 104
|
|
|
|
HIDDEN real __amm_az = ZERO;
|
|
HIDDEN real __num_az = ZERO;
|
|
|
|
TQuadroG::TQuadroG(const char quadro)
|
|
{
|
|
_registra = _bUsatoDistinta = FALSE;
|
|
switch (quadro)
|
|
{
|
|
case '3':
|
|
_quadro = "G";
|
|
_title = "Quadro G";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
inline TQuadroG& app() { return (TQuadroG&) main_app(); }
|
|
|
|
int TQuadroG::read(TMask& m)
|
|
{
|
|
int err = TRelation_application::read(m);
|
|
|
|
if (err == NOERR)
|
|
{
|
|
fill_ss(m);
|
|
err = read_prospetto_2(m);
|
|
}
|
|
return err;
|
|
}
|
|
|
|
int TQuadroG::write(const TMask& m)
|
|
{
|
|
//ss2rel(m);
|
|
int err = TRelation_application::write(m);
|
|
_registra = err == NOERR;
|
|
if (_registra)
|
|
err = write_prospetto_2(m);
|
|
return err;
|
|
}
|
|
|
|
int TQuadroG::rewrite(const TMask& m)
|
|
{
|
|
//ss2rel(m);
|
|
int err = TRelation_application::rewrite(m);
|
|
_registra = err == NOERR;
|
|
if (_registra)
|
|
err = write_prospetto_2(m,TRUE);
|
|
return err;
|
|
}
|
|
|
|
bool TQuadroG::remove()
|
|
{
|
|
remove_prospetto_2();
|
|
_registra = TRelation_application::remove();
|
|
return _registra;
|
|
}
|
|
|
|
int TQuadroG::read_prospetto_2(const TMask& m)
|
|
{
|
|
return NOERR;
|
|
}
|
|
|
|
int TQuadroG::write_prospetto_2(const TMask& m, bool force)
|
|
{
|
|
return NOERR;
|
|
}
|
|
|
|
int TQuadroG::remove_prospetto_2()
|
|
{
|
|
return NOERR;
|
|
}
|
|
|
|
void TQuadroG::init_query_mode (TMask& m)
|
|
{
|
|
TString16 codditta;
|
|
codditta << _codditta;
|
|
TMask_field& f = m.field(F_CODDITTA);
|
|
f.set(codditta);
|
|
f.check();
|
|
m.send_key(K_AUTO_ENTER,0);
|
|
}
|
|
|
|
void TQuadroG::update_totals(TSheet_field& f, int ss)
|
|
{
|
|
int i = 0;
|
|
TMask& m = f.mask();
|
|
switch (ss)
|
|
{
|
|
case 1:
|
|
{
|
|
real tot_numq, tot_amm;
|
|
tot_numq = tot_amm = ZERO;
|
|
const int items = f.items();
|
|
// Calcolo il totale
|
|
for (i = 0; i < items; i++)
|
|
{
|
|
TToken_string& r = f.row(i);
|
|
real numq(r.get(2));
|
|
real amm (r.get(3));
|
|
tot_numq += numq;
|
|
tot_amm += amm;
|
|
}
|
|
// totali...
|
|
m.set(F_P1_I_TOT1,tot_numq);
|
|
m.set(F_P1_I_TOT2,tot_amm);
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
real tot_valult;
|
|
const int items = f.items();
|
|
// Calcolo il totale
|
|
for (i = 0; i < items; i++)
|
|
{
|
|
TToken_string& r = f.row(i);
|
|
real val(r.get(1));
|
|
tot_valult += val;
|
|
}
|
|
// totali...
|
|
m.set(F_P1_II_TOT,tot_valult);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Quadro G prospetto 1 - I
|
|
// Calcola amm_complessivo = num_quote * amm_azione
|
|
bool TQuadroG::calc_amm(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_TAB)
|
|
{
|
|
TMask& m = f.mask();
|
|
real amm_az(m.get(AMM_AZ));
|
|
real rNumAz = m.get_real(NUM_AZ);
|
|
bool ricalcola = FALSE;
|
|
real amm_comp(m.get(AMM_COMP));
|
|
ricalcola = ( (__amm_az != amm_az) || (__num_az != rNumAz) );
|
|
if (!ricalcola && amm_comp != ZERO)
|
|
return TRUE;
|
|
|
|
// Calcola e setta il valore
|
|
real amm = ZERO;
|
|
amm = amm_az * rNumAz;
|
|
amm.trunc();
|
|
m.set(AMM_COMP, amm.string());
|
|
// Setta i flag usati per il confronto successivo
|
|
__amm_az = amm_az;
|
|
__num_az = rNumAz;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroG::exec_distinta(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
TExternal_app zzz(DISTINTA_APP);
|
|
zzz.run();
|
|
// Fai il ricalcolo
|
|
app()._bUsatoDistinta = TRUE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroG::user_create()
|
|
{
|
|
_msk = new TMask("771234a");
|
|
_rel = new TRelation(LF_QUAG);
|
|
_rel->add(LF_QUAGP,"CODDITTA=CODDITTA");
|
|
_codditta = get_firm_770();
|
|
_msk->disable(DLG_CANCEL); // disabilito Annulla nella toolbar
|
|
_msk->disable(DLG_NEWREC); // disabilito Nuovo nella toolbar
|
|
_msk->disable(DLG_DELREC); // disabilito Elimina nella toolbar
|
|
_msk->disable(DLG_FINDREC); // disabilito Ricerca nella toolbar
|
|
_msk->set_handler(DLG_DISTINTA, exec_distinta);
|
|
_msk->set_handler(mainmsk_handler);
|
|
TSheet_field& p1 = (TSheet_field&) _msk->field(F_P1_I);
|
|
p1.set_append(FALSE);
|
|
p1.set_notify(p1_notify);
|
|
p1.sheet_mask().set_handler(NUM_AZ, calc_amm);
|
|
p1.sheet_mask().set_handler(AMM_AZ, calc_amm);
|
|
TSheet_field& p2 = (TSheet_field&) _msk->field(F_P1_II);
|
|
p2.set_notify(p2_notify);
|
|
p2.set_append(FALSE);
|
|
//TSheet_field& pIII = (TSheet_field&) _msk->field(F_PIII);
|
|
//pIII.set_notify(pIII_notify);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroG::user_destroy()
|
|
{
|
|
delete _rel; delete _msk;
|
|
if (_registra || _bUsatoDistinta)
|
|
_rip.set(_quadro);
|
|
return TRUE;
|
|
}
|
|
|
|
void TQuadroG::ss2rel(const TMask& m)
|
|
{
|
|
TSheet_field& p1_I = (TSheet_field&)m.field(F_P1_I);
|
|
TRectype& rec = _rel->curr();
|
|
TString datad, ammq, numq, amm;
|
|
|
|
// Prospetto 1 - I Utili in denaro
|
|
for (int i = 0; i < RIGHE_P1_I; i++)
|
|
{
|
|
TToken_string& r = p1_I.row(i);
|
|
datad = r.get(0);
|
|
ammq = r.get();
|
|
numq = r.get();
|
|
amm = r.get();
|
|
|
|
// Costruisco i nomi dei campi (sono numerati)
|
|
TString16 n_datad ("P1DATAD");
|
|
n_datad << i+1;
|
|
TString16 n_ammq ("P1AMMQ");
|
|
n_ammq << i+1;
|
|
TString16 n_numq ("P1NUMQ");
|
|
n_numq << i+1;
|
|
TString16 n_amm ("P1AMM");
|
|
n_amm << i+1;
|
|
|
|
// Scrivo i suddetti campi nella relazione
|
|
rec.put(n_datad, datad);
|
|
rec.put(n_ammq, ammq);
|
|
rec.put(n_numq, numq);
|
|
rec.put(n_amm, amm);
|
|
}
|
|
|
|
// Prospetto 1 - II Utili in natura
|
|
TSheet_field& p1_II = (TSheet_field&)m.field(F_P1_II);
|
|
|
|
for (i = 0; i < RIGHE_P1_II; i++)
|
|
{
|
|
TToken_string& r = p1_II.row(i);
|
|
TString descr (r.get(0));
|
|
TString val (r.get());
|
|
|
|
// Costruisco i nomi dei campi (sono numerati)
|
|
TString16 n_descr ("P2DESC");
|
|
n_descr << i+1;
|
|
TString16 n_val ("P2VAL");
|
|
n_val << i+1;
|
|
|
|
// Scrivo i suddetti campi nella relazione
|
|
rec.put(n_descr, descr);
|
|
rec.put(n_val, val);
|
|
}
|
|
}
|
|
|
|
void TQuadroG::fill_ss(TMask& m)
|
|
{
|
|
TRectype k(LF_QUAGP);
|
|
TRecord_array ra(LF_QUAGP,"NPROG");
|
|
TSheet_field& p1_I = (TSheet_field&)m.field(F_P1_I);
|
|
TSheet_field& p1_II = (TSheet_field&)m.field(F_P1_II);
|
|
|
|
// Prospetto 1 - I Utili in denaro
|
|
k.put(QGP_CODDITTA,_codditta);
|
|
k.put(QGP_PROSPETTO,"1");
|
|
k.put(QGP_SEZIONE,"1");
|
|
ra.read(k);
|
|
if (ra.rows()>0)
|
|
{
|
|
const int items = ra.rows();
|
|
for (int i = 0; i < items; i++)
|
|
{
|
|
const TRectype& r = ra.row(i);
|
|
TToken_string& t = p1_I.row(i+1);
|
|
t.add(r.get(QGP_DATADEL));
|
|
t.add(r.get(QGP_UTIL1S));
|
|
t.add(r.get(QGP_NUMQUOTE));
|
|
t.add(r.get(QGP_UTIL2S));
|
|
}
|
|
}
|
|
//if (m.mode() == MODE_MOD)
|
|
// update_totals(p1_I,1);
|
|
|
|
// Prospetto 1 - II Utili in natura
|
|
k.zero();
|
|
k.put(QGP_CODDITTA,_codditta);
|
|
k.put(QGP_PROSPETTO,"1");
|
|
k.put(QGP_SEZIONE,"2");
|
|
ra.read(k);
|
|
if (ra.rows()>0)
|
|
{
|
|
const int items = ra.rows();
|
|
for (int i = 0; i < items; i++)
|
|
{
|
|
const TRectype& r = ra.row(i);
|
|
TToken_string& t = p1_II.row(i+1);
|
|
t.add(r.get(QGP_DESCRBENI));
|
|
t.add(r.get(QGP_UTIL1S));
|
|
}
|
|
}
|
|
//if (m.mode() == MODE_MOD)
|
|
// update_totals(p1_II,2);
|
|
|
|
|
|
// Prospetto 2 - I Utili in denaro
|
|
k.zero();
|
|
k.put(QGP_CODDITTA,_codditta);
|
|
k.put(QGP_PROSPETTO,"2");
|
|
k.put(QGP_SEZIONE,"1");
|
|
ra.read(k);
|
|
if (ra.rows()>0)
|
|
{
|
|
|
|
}
|
|
|
|
// Prospetto 2 - II Utili in natura
|
|
k.zero();
|
|
k.put(QGP_CODDITTA,_codditta);
|
|
k.put(QGP_PROSPETTO,"2");
|
|
k.put(QGP_SEZIONE,"2");
|
|
ra.read(k);
|
|
if (ra.rows()>0)
|
|
{
|
|
}
|
|
}
|
|
|
|
bool TQuadroG::p1_notify(TSheet_field& s, int r, KEY k)
|
|
{
|
|
switch(k)
|
|
{
|
|
case K_ENTER:
|
|
__amm_az = ZERO;
|
|
__num_az = ZERO;
|
|
update_totals(s, 1);
|
|
break;
|
|
case K_SPACE:
|
|
{
|
|
TToken_string& row = s.row(r);
|
|
__num_az = row.get(3);
|
|
__amm_az = row.get(4);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroG::p2_notify(TSheet_field& s, int r, KEY k)
|
|
{
|
|
switch(k)
|
|
{
|
|
case K_ENTER:
|
|
update_totals(s, 2);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TQuadroG::mainmsk_handler(TMask& m, KEY k)
|
|
{
|
|
if (k == K_ESC)
|
|
{
|
|
TOperable_field& f = m.focus_field();
|
|
m.set_focus_field(f.dlg());
|
|
}
|
|
return TRUE;
|
|
} |