campo-sirio/m770/771232.cpp
nik 575590459b Correzioni quasi ultime immissione
git-svn-id: svn://10.65.10.50/trunk@3202 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-07-18 10:04:12 +00:00

773 lines
18 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 "77lib.h"
#include "774200.h"
#include "771234a.h" // G
#include "771232.h"
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Lista modifiche:
//
// 17.4.96 Corretto scambio di colonne nel prospetto 3 in scrittura
//
//
/////////////////////////////////////////////////////////////////////////////////////////////
// Descrizioni prospetto 3
HIDDEN const char* p3_date_delib[20] =
{
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"1-1-1976/31-12-1995",
"9-4-1974/31-12-1975",
"9-4-1974/31-12-1975",
"9-4-1974/31-12-1975",
"9-4-1974/31-12-1975",
"1-1-1974/8-4-1974" ,
"1-1-1974/8-4-1974" ,
"1-1-1974/8-4-1974" ,
"24-2-1964/31-12-1973",
"24-2-1964/31-12-1973",
"24-2-1964/31-12-1973",
"1-1-1963/23-2-1964",
"1-1-1963/23-2-1964",
"1-1-1963/23-2-1964"
};
// Aliquote prospetto 3
HIDDEN const char* aliq[15] =
{
"10",
"12.5",
"15",
"30",
"32.4",
"50",
"10",
"15",
"30",
"10",
"30",
"5",
"30",
"8",
"15"
};
// Date prospetto 2
HIDDEN const char* p2_date_delib[5] =
{
"1-1-1976/31-12-1995",
"9-4-1974/31-12-1975",
"1-1-1974/8-4-1974" ,
"24-2-1964/31-12-1973",
"1-1-1963/23-2-1964"
};
HIDDEN const int RIGHE_P1 = 4;
HIDDEN const int RIGHE_P2 = 5;
HIDDEN const int RIGHE_PII = 3;
HIDDEN const int RIGHE_PIII = 20;
HIDDEN const char* DISTINTA_APP = "771mod -6 4";
#define NUM_AZ 105
#define AMM_AZ 104
#define AMM_COMP 106
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);
fill_arr(m);
}
return err;
}
void TQuadroG::init_insert_mode (TMask& m)
{
fill_ss(m);
fill_arr(m);
}
void TQuadroG::init_modify_mode (TMask& m)
{
m.disable(DLG_DELREC);
}
void TQuadroG::init_query_mode (TMask& m)
{
TString16 codditta; codditta << _codditta;
if (codditta != "0")
{
m.field(F_CODDITTA).set(codditta);
m.field(F_CODDITTA).check();
}
m.send_key(K_AUTO_ENTER,0);
}
void TQuadroG::update_totals(TSheet_field& f, int ss)
{
int i = 0;
switch (ss)
{
case 1:
{
real tot_numq, tot_amm;
tot_numq = tot_amm = ZERO;
TSheet_field& p1 = f;
// Calcolo il totale
for (i = 0; i < RIGHE_P1; i++)
{
TToken_string& r = p1.row(i);
real numq(r.get(4));
real amm (r.get(5));
tot_numq += numq;
tot_amm += amm;
}
// Setto le celle di totale
TToken_string& row = p1.row(i);
row.add(tot_numq.string(), 4);
row.add(tot_amm.string(), 5);
p1.force_update(i);
}
break;
case 2:
{
TSheet_field& p2 = f;
real tot_c2, tot_c3, tot_c4, tot_c5, tot_c6;
tot_c2 = tot_c3 = tot_c4 = tot_c5 = tot_c6 = ZERO;
for (i = 0; i < RIGHE_P2; i++)
{
TToken_string& r2 = p2.row(i);
real c2 (r2.get(1));
real c3 (r2.get());
real c4 (r2.get());
real c5 (r2.get());
real c6 (r2.get());
tot_c2 += c2;
tot_c3 += c3;
tot_c4 += c4;
tot_c5 += c5;
tot_c6 += c6;
}
// Setto le celle di totale
TToken_string& row2 = p2.row(i);
row2.add(tot_c2.string(), 1);
row2.add(tot_c3.string(), 2);
row2.add(tot_c4.string(), 3);
row2.add(tot_c5.string(), 4);
row2.add(tot_c6.string(), 5);
p2.force_update(i);
}
break;
case 3:
{
real tot_valult;
tot_valult = ZERO;
TSheet_field& pII = f;
// Calcolo il totale
for (i = 0; i < RIGHE_PII; i++)
{
TToken_string& r = pII.row(i);
real val(r.get(2));
tot_valult += val;
}
// Setto le celle di totale
TToken_string& row = pII.row(i);
row.add(tot_valult.string(), 2);
pII.force_update(i);
}
break;
case 4:
{
real tcol2, tcol3, tcol5, tcol6, tcol7;
tcol2 = tcol3 = tcol5 = tcol6 = tcol7 = ZERO;
TSheet_field& pIII = f;
// Calcolo il totale
for (i = 0; i < RIGHE_PIII; i++)
{
TToken_string& r = pIII.row(i);
real c2(r.get(1));
real c3(r.get(2));
real c5(r.get(4));
real c6(r.get(5));
real c7(r.get(6));
tcol2 += c2;
tcol3 += c3;
tcol5 += c5;
tcol6 += c6;
tcol7 += c7;
}
// Setto le celle di totale
TToken_string& row = pIII.row(i);
row.add(tcol2.string(), 1);
row.add(tcol3.string(), 2);
row.add(tcol5.string(), 4);
row.add(tcol6.string(), 5);
row.add(tcol7.string(), 6);
pIII.force_update(i);
}
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));
// const int num_az = m.get_int(NUM_AZ);
// 12.6.96 num_az adesso e' un real!
real rNumAz = m.get_real(NUM_AZ);
bool ricalcola = FALSE;
real amm_comp(m.get(AMM_COMP));
// Determina se uno dei valori e' stato modificato
ricalcola = ( (__amm_az != amm_az) || (__num_az != rNumAz) );
// Se non e' stato cambiato non toccare il totale gia' impostato
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);
_codditta = get_firm_770();
_msk->set_handler(DLG_DISTINTA, exec_distinta);
TSheet_field& p1 = (TSheet_field&) _msk->field(F_P1);
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_P2);
p2.set_notify(p2_notify);
TSheet_field& pII = (TSheet_field&) _msk->field(F_PII);
pII.set_notify(pII_notify);
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::arr2rel(const TMask& m)
{
TToken_string p3a;
TToken_string p3b;
TToken_string p3c;
TToken_string p3d;
TToken_string p3e;
TToken_string p3f;
TRectype& r = _rel->curr();
int dlg; dlg = 0;
// Prospetto 3 - Prospetto delle ritenute
TSheet_field& pIII = (TSheet_field&)m.field(F_PIII);
for (int i = 0; i < RIGHE_PIII; i++)
{
TToken_string& r = pIII.row(i);
TString ut94 (r.get(1)); // Salto data delibera che e' fisso
TString imp (r.get());
TString ali (r.get());
TString racc (r.get());
TString rimp (r.get());
TString utnsogg (r.get());
p3a.add(ut94);
p3b.add(imp);
p3c.add(ali);
p3d.add(racc);
p3e.add(rimp);
p3f.add(utnsogg);
}
r.put(QG_P33A, p3a);
r.put(QG_P33B, p3b);
r.put(QG_P35A, p3c);
r.put(QG_P35B, p3d);
r.put(QG_P36A, p3e);
r.put(QG_P36B, p3f);
// Salvo i totali che servono poi per i riporti e le stampe (774200.cpp)
TToken_string& r_tot = pIII.row(i);
real tot_col3(r_tot.get(2));
real tot_col5(r_tot.get(4));
real tot_col6(r_tot.get(5));
real tot_col7(r_tot.get(6));
r.put(QG_P33TOT, tot_col3);
r.put(QG_P35TOT, tot_col5);
r.put(QG_P36TOT, tot_col6);
r.put(QG_P37TOT, tot_col7);
}
void TQuadroG::ss2rel(const TMask& m)
{
TSheet_field& p1 = (TSheet_field&)m.field(F_P1);
TRectype& rec = _rel->curr();
for (int i = 0; i < RIGHE_P1; i++)
{
TToken_string& r = p1.row(i);
TString datad (r.get(0));
TString titol (r.get());
TString datap (r.get());
TString ammq (r.get());
TString numq (r.get());
TString amm (r.get());
// Costruisco i nomi dei campi (sono numerati)
TString16 n_datad ("P1DATAD");
n_datad << i+1;
TString16 n_titol ("P1TITOLO");
n_titol << i+1;
TString16 n_datap ("P1DATAP");
n_datap << 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_titol, titol);
rec.put(n_datap, datap);
rec.put(n_ammq, ammq);
rec.put(n_numq, numq);
rec.put(n_amm, amm);
}
// Salvo i totali
TToken_string& r = p1.row(i);
TString tot_numq (r.get(4));
TString tot_amm (r.get(5));
rec.put("P1NUMQT", tot_numq);
rec.put("P1AMMT", tot_amm);
// costruisco le token_string leggendole dallo spreadsheet
TToken_string p22(200);
TToken_string p23(200);
TToken_string p24(200);
TToken_string p25(200);
TToken_string p26(200);
TSheet_field& p2 = (TSheet_field&)m.field(F_P2);
for (i = 0; i < RIGHE_P2; i++)
{
TToken_string& r = p2.row(i);
TString c2 (r.get(1));
TString c3 (r.get());
TString c4 (r.get());
TString c5 (r.get());
TString c6 (r.get());
p22.add(c2);
p23.add(c3);
p24.add(c4);
p25.add(c5);
p26.add(c6);
}
// scrivo finalmente nel file le tokens. di cui sopra
rec.put("P22", p22);
rec.put("P23", p23);
rec.put("P24", p24);
rec.put("P25", p25);
rec.put("P26", p26);
// scrivo i totali
TToken_string& r2 = p2.row(i);
TString tc2 (r2.get(1));
TString tc3 (r2.get());
TString tc4 (r2.get());
TString tc5 (r2.get());
TString tc6 (r2.get());
rec.put("P22TOT", tc2);
rec.put("P23TOT", tc3);
rec.put("P24TOT", tc4);
rec.put("P25TOT", tc5);
rec.put("P26TOT", tc6);
// Prospetto 1 - II Utili in natura
TSheet_field& pII = (TSheet_field&)m.field(F_PII);
// TRectype& rec = _rel->curr();
for (i = 0; i < RIGHE_PII; i++)
{
TToken_string& r = pII.row(i);
TString descr (r.get(0));
TString datad (r.get());
TString val (r.get());
// Costruisco i nomi dei campi (sono numerati)
TString16 n_descr ("P2DESC");
n_descr << i+1;
TString16 n_data ("P2DATA");
n_data << i+1;
TString16 n_val ("P2VAL");
n_val << i+1;
// Scrivo i suddetti campi nella relazione
rec.put(n_descr, descr);
rec.put(n_data, datad);
rec.put(n_val, val);
}
// Salvo i totali
TToken_string& rII = pII.row(i);
TString tot_val (rII.get(2));
rec.put(QG_P2VALT, tot_val);
}
void TQuadroG::fill_arr(TMask& m)
{
TRectype& r = _rel->curr();
TToken_string p3a(r.get("P33A"));
TToken_string p3b(r.get("P33B"));
TToken_string p3c(r.get("P35A"));
TToken_string p3d(r.get("P35B"));
TToken_string p3e(r.get("P36A"));
TToken_string p3f(r.get("P36B"));
int dlg, j; dlg = j = 0;
TSheet_field& pIII = (TSheet_field&)m.field(F_PIII);
const int COL_ALIQ = 3;
int ind_aliq = 0;
for (int i = 1; i <= RIGHE_PIII; i++)
{
TRectype& r = _rel->curr();
TToken_string& row = pIII.row(i-1);
row.add(p3_date_delib[i-1]);
row.add(p3a.get(i-1));
row.add(p3b.get(i-1));
row.add(p3c.get(i-1));
row.add(p3d.get(i-1));
row.add(p3e.get(i-1));
row.add(p3f.get(i-1));
if (i != 7 && i != 11 && i != 14 && i != 17 && i != 20)
{
row.add(aliq[ind_aliq++], 3);
pIII.disable_cell(i-1, COL_ALIQ);
}
}
if (m.mode() == MODE_MOD)
update_totals(pIII,4);
else
{
// Aggiungo la riga per i totali
TToken_string& row = pIII.row(i-1);
row.add("Totali", 0);
pIII.disable_cell(i-1, -1);
pIII.force_update();
}
}
void TQuadroG::fill_ss(TMask& m)
{
TSheet_field& p1 = (TSheet_field&)m.field(F_P1);
for (int i = 1; i <= RIGHE_P1; i++)
{
TRectype& r = _rel->curr();
TToken_string& row = p1.row(i-1);
// Costruisco i nomi dei campi (sono numerati)
TString16 n_datad ("P1DATAD");
n_datad << i;
TString16 n_titol ("P1TITOLO");
n_titol << i;
TString16 n_datap ("P1DATAP");
n_datap << i;
TString16 n_ammq ("P1AMMQ");
n_ammq << i;
TString16 n_numq ("P1NUMQ");
n_numq << i;
TString16 n_amm ("P1AMM");
n_amm << i;
// Leggo i campi
TString datad (r.get(n_datad));
TString titol (r.get(n_titol));
TString datap (r.get(n_datap));
TString ammq (r.get(n_ammq));
TString numq (r.get(n_numq));
TString amm (r.get(n_amm));
row.add(datad);
row.add(titol);
row.add(datap);
row.add(ammq);
row.add(numq);
row.add(amm);
}
if (m.mode() == MODE_MOD)
update_totals(p1,1);
else
{
// Aggiungo la riga per i totali
TToken_string& row = p1.row(i-1);
row.add("Totali", 1);
p1.disable_cell(i-1, -1);
p1.force_update();
}
TRectype& r = _rel->curr();
TToken_string p22(r.get("P22"));
TToken_string p23(r.get("P23"));
TToken_string p24(r.get("P24"));
TToken_string p25(r.get("P25"));
TToken_string p26(r.get("P26"));
TSheet_field& p2 = (TSheet_field&)m.field(F_P2);
for (i = 1; i <= RIGHE_P2; i++)
{
TToken_string& row2 = p2.row(i-1);
row2.add(p2_date_delib[i-1]);
row2.add(p22.get(i-1));
row2.add(p23.get(i-1));
row2.add(p24.get(i-1));
row2.add(p25.get(i-1));
row2.add(p26.get(i-1));
}
if (m.mode() == MODE_MOD)
update_totals(p2,2);
else
{
// Aggiungo la riga per i totali
TToken_string& row2 = p2.row(i-1);
row2.add("Totali", 0);
p2.disable_cell(i-1, -1);
p2.force_update();
}
TSheet_field& pII = (TSheet_field&)m.field(F_PII);
for (i = 1; i <= RIGHE_PII; i++)
{
TRectype& r = _rel->curr();
TToken_string& row = pII.row(i-1);
// Costruisco i nomi dei campi (sono numerati)
TString16 pII_desc ("P2DESC");
pII_desc << i;
TString16 pII_data ("P2DATA");
pII_data << i;
TString16 pII_val ("P2VAL");
pII_val << i;
// Leggo i campi
TString descr (r.get(pII_desc));
TString datap (r.get(pII_data));
TString valul (r.get(pII_val));
row.add(descr);
row.add(datap);
row.add(valul);
}
if (m.mode() == MODE_MOD)
update_totals(pII,3);
else
{
// Aggiungo la riga per i totali
TToken_string& row = pII.row(i-1);
row.add("Totale utili in natura", 0);
pII.disable_cell(i-1, -1);
pII.force_update();
}
}
int TQuadroG::write(const TMask& m)
{
ss2rel(m);
arr2rel(m);
int err = TRelation_application::write(m);
_registra = err == NOERR;
return err;
}
int TQuadroG::rewrite(const TMask& m)
{
ss2rel(m);
arr2rel(m);
int err = TRelation_application::rewrite(m);
_registra = err == NOERR;
return err;
}
bool TQuadroG::remove()
{
const bool ok = TRelation_application::remove();
return ok;
}
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;
// Rifiuta di entrare sull'ultima riga
case K_TAB:
return r < RIGHE_P1;
break;
case K_INS:
if (s.mask().is_running())
return FALSE; // rifiuta inserimento di nuove righe
break;
default:
break;
}
return TRUE;
}
bool TQuadroG::p2_notify(TSheet_field& s, int r, KEY k)
{
switch(k)
{
case K_SPACE:
break;
case K_ENTER:
update_totals(s, 2);
break;
// Rifiuta di entrare sull'ultima riga
case K_TAB:
return r < RIGHE_P2;
break;
case K_INS:
if (s.mask().is_running())
return FALSE; // rifiuta inserimento di nuove righe
break;
default:
break;
}
return TRUE;
}
bool TQuadroG::pII_notify(TSheet_field& s, int r, KEY k)
{
switch(k)
{
case K_SPACE:
break;
case K_ENTER:
update_totals(s, 3);
break;
// Rifiuta di entrare sull'ultima riga
case K_TAB:
return r < RIGHE_PII;
break;
case K_INS:
if (s.mask().is_running())
return FALSE; // rifiuta inserimento di nuove righe
break;
default:
break;
}
return TRUE;
}
bool TQuadroG::pIII_notify(TSheet_field& s, int r, KEY k)
{
switch(k)
{
case K_SPACE:
break;
case K_ENTER:
update_totals(s, 4);
break;
// Rifiuta di entrare sull'ultima riga
case K_TAB:
return r < RIGHE_PIII;
break;
case K_INS:
if (s.mask().is_running())
return FALSE; // rifiuta inserimento di nuove righe
break;
default:
break;
}
return TRUE;
}