campo-sirio/m770/771232.cpp
angelo 0f924bdd96 Prime modifiche per Quadro G 1997
git-svn-id: svn://10.65.10.50/trunk@4514 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-03 16:54:18 +00:00

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;
}