// 771232.cpp - Quadri G #include #include #include #include #include #include #include #include #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; }