git-svn-id: svn://10.65.10.50/branches/R_10_00@22886 c028cbd2-c16b-5b4b-a496-9718f37d4682
2350 lines
67 KiB
C++
Executable File
2350 lines
67 KiB
C++
Executable File
// 770100.cpp - Scheda percipienti
|
||
#include <defmask.h>
|
||
#include <mailbox.h>
|
||
#include <recarray.h>
|
||
|
||
#include "scperc.h"
|
||
#include "rver.h"
|
||
#include "rpag.h"
|
||
#include "perc.h"
|
||
#include "../cg/cgsaldac.h"
|
||
|
||
#include <anagr.h>
|
||
#include <partite.h>
|
||
#include <scadenze.h>
|
||
#include <pagsca.h>
|
||
// per dinamica non riprendere #include "../ve/velib.h"
|
||
|
||
#include "770101.h"
|
||
#include "770102.h"
|
||
#include "770100a.h"
|
||
#include "770.h"
|
||
#include "77lib.h"
|
||
|
||
// Token_string pilota per relazione tra l'informazione e la
|
||
// sua posizione nello sheet, ogni riga individua uno sheet diverso
|
||
const char* PILOT_SHEET[] = {
|
||
"DATAPAG|COMPENSO|SPESA|IMPONIBILE|PERC|RITENUTA|SOMREGCONV|ALQIMP10|CTSSNPERC|CTSSNCOMP|COD10|NETTO|SOMNSRIT|AMMLORDO|QUOTAPROV|IMPNETTO|COMNETTO|NUMVERS|NUMREG",
|
||
"DATAPAG|COMPENSO|IMPCPA|IMPONIBILE|PERC|RITENUTA|SPESA|SOMREGCONV|NETTO|SOMNSRIT|AMMLORDO|QUOTAPROV|IMPNETTO|COMNETTO|NUMVERS|NUMREG",
|
||
};
|
||
|
||
// Items per causale quadro SC
|
||
const char* ITEMS_SC[] = {
|
||
"A|A", "B|B", "C|C", "D|D", "E|E", "F|F", "G|G", "H|H", "I|I",
|
||
"K|K", "L|L", "M|M", "N|N", "P|P", "Q|Q", "R|R", "S|S", "T|T", NULL };
|
||
|
||
// Items per causale quadro SE
|
||
const char* ITEMS_SE[] = {
|
||
"A|A", "B|B", "C|C", "D|D", "E|E", "F|F", "G|G", "T|T", NULL };
|
||
|
||
// Items per causale quadro SF
|
||
const char* ITEMS_SF[] = {
|
||
"A|A", "B|B", "C|C", "D|D", "E|E", "F|F", "G|G", "H|H", "I|I",
|
||
"L|L", "M|M", "N|N", "P|P", "Q|Q", "R|R", "S|S", "T|T", NULL };
|
||
|
||
// Items per causale quadro SG
|
||
const char* ITEMS_SG[] = {
|
||
"A|A", "B|B", "C|C", "D|D", "E|E", NULL };
|
||
|
||
// Items per causale quadro LA
|
||
const char* ITEMS_LA[] = {
|
||
"A|A", "B|B", "C|C", "D|D", "E|E", "F|F", "G|G", "H|H", "I|I", "L|L", "M|M",
|
||
"N|N", "P|P", "Q|Q", "R|R", "S|S", "T|T", "U|U", "V|V", "W|W", "Z|Z", NULL };
|
||
|
||
TSchedaPercipienti::TSchedaPercipienti(): _rel(NULL), _flag_cg(false)
|
||
{
|
||
_from_modify = false;
|
||
_soggnres = false;
|
||
memset(_msk, 0, sizeof(_msk));
|
||
}
|
||
|
||
void TSchedaPercipienti::update_lasts(TMask& m)
|
||
{
|
||
if (m.mode() == MODE_MOD)
|
||
{
|
||
const long codditta = m.get_long(F_CODDITTA);
|
||
const char tipoa = m.get(F_TIPOA)[0];
|
||
const long codanagr = m.get_long(F_CODANAGR);
|
||
const int nprog = m.get_int(F_NPROG);
|
||
|
||
// Determino ultimo numero di riga usato nei PAGAMENTI
|
||
_rpag->zero();
|
||
_rpag->put("CODDITTA", codditta);
|
||
_rpag->put("TIPOA", tipoa);
|
||
_rpag->put("CODANAGR", codanagr);
|
||
_rpag->put("NPROG", nprog);
|
||
|
||
TRectype dep(_rpag->curr());
|
||
long nriga = 0L;
|
||
|
||
for (_rpag->read(); !_rpag->eof(); _rpag->next())
|
||
{
|
||
if (_rpag->curr() > dep) break;
|
||
nriga = _rpag->get_long("NRIGA");
|
||
}
|
||
_lastpag = nriga;
|
||
|
||
// Determino ultimo numero di riga usato nei VERSAMENTI
|
||
_rver->zero();
|
||
_rver->put("CODDITTA", (long) codditta);
|
||
_rver->put("TIPOA", tipoa);
|
||
_rver->put("CODANAGR", (long) codanagr);
|
||
_rver->put("NPROG", nprog);
|
||
|
||
TRectype dep2(_rver->curr());
|
||
long nrigav = 0L;
|
||
|
||
for (_rver->read(); !_rver->eof(); _rver->next())
|
||
{
|
||
if (_rver->curr() > dep2) break;
|
||
nrigav = _rver->get_long("NRIGA");
|
||
}
|
||
_lastvers = nrigav;
|
||
}
|
||
else
|
||
_lastpag = _lastvers = 0L;
|
||
}
|
||
|
||
bool TSchedaPercipienti::changing_mask(int mode)
|
||
{
|
||
if ((mode == MODE_MOD) && (_mode == MODE_INS))
|
||
return false;
|
||
else
|
||
return _mode != mode;
|
||
}
|
||
|
||
TMask* TSchedaPercipienti::get_mask(int mode)
|
||
{
|
||
const int m = (mode == MODE_QUERY) ? 0 : 1;
|
||
_mode = mode;
|
||
return load_mask(m);
|
||
}
|
||
|
||
|
||
TMask* TSchedaPercipienti::load_mask(int n)
|
||
{
|
||
if (_msk[n] != NULL)
|
||
return _msk[n];
|
||
|
||
TFilename name("770100"); name << char(n == 0 ? 'a' : 'b');
|
||
TMask* m = new TMask(name);
|
||
|
||
switch (n)
|
||
{
|
||
case 0:
|
||
m->set_handler(F_NPROG, nprog_handler);
|
||
m->set_handler(F_CODDITTA, codditta_handler);
|
||
m->set_handler(F_CODANAGRCOM, codanagr_handler);
|
||
m->set_handler(F_CODANAGRPERC, codanagr_handler);
|
||
m->set_handler(F_AGGPAG, aggpag_handler);
|
||
break;
|
||
case 1:
|
||
{
|
||
m->disable(DLG_FINDREC);
|
||
m->set_handler(F_DATADOC, check_handler);
|
||
m->set_handler(F_CODCAUS, check_causale);
|
||
m->set_handler(F_SPESE, check_spese);
|
||
m->set_handler(F_COMPENS, check_compensi);
|
||
m->set_handler(F_MESECOMP, check_competenza);
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
// Handler versamenti
|
||
////////////////////////////////////////////////////////////////////////
|
||
TSheet_field& vers = m->sfield(F_VERSAMENTI);
|
||
vers.set_notify(vers_notify);
|
||
TMask& sm = vers.sheet_mask();
|
||
sm.set_handler(F_VERS_1015, vers1015_handler);
|
||
sm.set_handler(DLG_SELPAG, pag_select);
|
||
sm.set_handler(DLG_AZZERA, ver_azzera);
|
||
sm.set_handler(F_TIPOVERS, tipo_hndl);
|
||
sm.set_handler(F_LUOVERS, luo_hndl);
|
||
sm.set_handler(F_ABI, abicab_hndl);
|
||
sm.set_handler(F_CAB, abicab_hndl);
|
||
}
|
||
break;
|
||
default:
|
||
CHECKD(0, "Che strano genere di maschera e' la ", n);
|
||
break;
|
||
}
|
||
return _msk[n] = m;
|
||
}
|
||
|
||
// Ricerca e output dell'ultimo nprog del percipiente scelto
|
||
bool TSchedaPercipienti::setta_nprog(TMask& m, const bool variazione, const char* codanag)
|
||
{
|
||
long nprog = 0L;
|
||
const char tipoa = m.get(F_TIPOA)[0];
|
||
const TString8 codanagr(codanag && *codanag ? codanag : m.get(F_CODANAGR));
|
||
const long codditta = get_firm_770();
|
||
|
||
// Scrivi nprog solo se il percipiente ESISTE sull'arkivio
|
||
if (!app().esiste_perc(m, codanagr))
|
||
return true;
|
||
|
||
// istanza e inizializza chiave file schede
|
||
TLocalisamfile scperc(LF_SCPERC);
|
||
|
||
bool trovato = false;
|
||
const long numreg = app().coll_numreg();
|
||
if (numreg > 0L)
|
||
{
|
||
scperc.setkey(3);
|
||
scperc.put(SPR_CODDITTA, codditta);
|
||
scperc.put(SPR_NUMREG, numreg);
|
||
|
||
if (scperc.read(_isgteq) == NOERR && scperc.get_long(SPR_NUMREG) == numreg)
|
||
{
|
||
nprog = scperc.get_int(SPR_NPROG);
|
||
trovato = true;
|
||
}
|
||
scperc.setkey(1);
|
||
}
|
||
if (!trovato)
|
||
{
|
||
scperc.zero();
|
||
scperc.put("CODDITTA", codditta);
|
||
scperc.put("TIPOA", tipoa);
|
||
scperc.put("CODANAGR", codanagr);
|
||
|
||
// istanza record di confronto
|
||
TRectype rec(scperc.curr());
|
||
|
||
// cerca ultimo progressivo usato
|
||
// e per tipo collegamento variazione
|
||
// individuo eventuale scheda coincidente
|
||
for (scperc.read(_isgteq); scperc.good() && scperc.curr() == rec && !trovato; scperc.next())
|
||
{
|
||
nprog = scperc.get_long("NPROG");
|
||
if (variazione)
|
||
{
|
||
TString16 numdoc,datadoc;
|
||
numdoc = scperc.get("NUMDOC");
|
||
numdoc.trim();
|
||
datadoc = scperc.get("DATADOC");
|
||
trovato = ((numdoc == app()._coll._numdoc) && (datadoc == app()._coll._datadoc));
|
||
}
|
||
}
|
||
}
|
||
if (!trovato)
|
||
nprog = nprog++;
|
||
m.set(F_NPROG, nprog);
|
||
|
||
return trovato;
|
||
}
|
||
|
||
bool TSchedaPercipienti::codditta_handler(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_TAB && !f.mask().is_running())
|
||
{
|
||
const long codditta = get_firm_770();
|
||
if (codditta > 0)
|
||
{
|
||
f.set(codditta);
|
||
f.check();
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TSchedaPercipienti::codanagr_handler(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_TAB)
|
||
{
|
||
TMask& m = f.mask();
|
||
const bool variazione = app().coll_variazione();
|
||
TString8 codanagr(f.get());
|
||
if (codanagr.full())
|
||
{
|
||
if (!app().esiste_perc(m, codanagr))
|
||
return f.warning_box("Percipiente non valido");
|
||
setta_nprog(m, variazione, codanagr);
|
||
}
|
||
// faccio a mano decodifica del percipiente
|
||
// perch<63> l'automatismo non funziona
|
||
const long tmp_codanagr = atol(codanagr);
|
||
const TString4 tmp_tipoa = m.get(F_TIPOA);
|
||
const TString& tmp_ragsoc = app().get_ragsoc(tmp_tipoa, tmp_codanagr);
|
||
m.set(F_RAGSOCPER, tmp_ragsoc);
|
||
m.set(F_RAGSOCCOM, tmp_ragsoc);
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
void TSchedaPercipienti::calcola_riga_pag(TRectype & rec,
|
||
const real h_PercAssImp,
|
||
const real h_PercCassaPrev,
|
||
const real h_PercRitenuta,
|
||
const real h_PercInps,
|
||
const real h_PercAssImpInps,
|
||
const real h_PercCommitInps)
|
||
{
|
||
const int fdec = TCurrency::get_firm_dec();
|
||
real compenso = rec.get_real(PAG_COMPENSO);
|
||
real impcpa = (compenso * h_PercCassaPrev) / (CENTO + h_PercCassaPrev); impcpa.round(fdec); // calcolo CPA
|
||
rec.put(PAG_IMPCPA, impcpa);
|
||
real imponibile = ((compenso - impcpa) * h_PercAssImp) / CENTO; imponibile.round(fdec); // calcolo imponibile
|
||
rec.put(PAG_IMPONIBILE, imponibile);
|
||
real ritlorda = (imponibile * h_PercRitenuta) / CENTO; ritlorda.round(fdec); // calcolo ritenuta lorda
|
||
rec.put(PAG_RITLORDA, ritlorda);
|
||
const real detfamil = rec.get_real(PAG_DETFAMIL);
|
||
const real detlavdip = rec.get_real(PAG_DETLAVDIP);
|
||
const real totdet = detfamil + detlavdip;
|
||
const real ritenuta = totdet > ritlorda ? ZERO : ritlorda - totdet;
|
||
rec.put(PAG_RITENUTA, ritenuta);
|
||
real ctssncomp = (((compenso * h_PercAssImpInps) / CENTO) * h_PercInps) / CENTO; ctssncomp.round(fdec); // calcolo contributo Inps complessivo
|
||
rec.put(PAG_INPSCOMP, ctssncomp);
|
||
real ctssnperc = (h_PercCommitInps == ZERO) ? ctssncomp - ((ctssncomp * 2) / 3) : ctssncomp - ((ctssncomp * h_PercCommitInps) / CENTO); ctssnperc.round(fdec); // calcolo contributo Inps del percipiente
|
||
rec.put(PAG_INPSPERC, ctssnperc);
|
||
real utpagati = rec.get_real(PAG_UTPAGATI);
|
||
if (abs(utpagati) > abs(imponibile))
|
||
utpagati = imponibile;
|
||
real ritutpag = rec.get_real(PAG_RITUTPAG);
|
||
if (abs(ritutpag) > abs(ritenuta))
|
||
ritutpag = ritenuta;
|
||
rec.put(PAG_UTSPETT, imponibile - utpagati); // ? da verificare calcolo utili spettanti
|
||
rec.put(PAG_RITUTPAG, ritenuta - ritutpag); // ? da verificare calcolo ritenute utili spettanti
|
||
const real spesa = rec.get(PAG_SPESA);
|
||
const real netto = compenso + spesa - ritenuta - ctssnperc; // calcolo compenso netto
|
||
rec.put(PAG_NETTO, netto);
|
||
const real somregconv = rec.get_real(PAG_SOMREGCONV);
|
||
const real somnsrit = compenso - imponibile + spesa - impcpa - somregconv ; // calcolo somme non soggette a ritenuta
|
||
rec.put(PAG_SOMNSRIT, somnsrit);
|
||
real controbb = rec.get_real(PAG_SOMREGCONV);
|
||
const real ammlordo = imponibile + somnsrit + controbb + somregconv; // calcolo ammontare lordo
|
||
rec.put(PAG_AMMLORDO, ammlordo);
|
||
const real quotaprov = somnsrit - spesa; // calcolo quota provvigioni
|
||
rec.put(PAG_QUOTAPROV, quotaprov);
|
||
const real impnetto = imponibile - ritenuta; // calcolo imponibile al netto delle ritenute
|
||
rec.put(PAG_IMPNETTO, impnetto);
|
||
const real comnetto = compenso - ritenuta; // calcolo compenso al netto delle ritenute
|
||
rec.put(PAG_COMNETTO, comnetto);
|
||
}
|
||
|
||
void TSchedaPercipienti::agg_pagamenti(const TRectype& sch, const TDate& pag_dal)
|
||
{
|
||
const long numreg = sch.get_long(SCH_NUMREG);
|
||
|
||
if (numreg > 0)
|
||
{
|
||
#ifdef DBG
|
||
if (numreg == 31723)
|
||
int cazzone = 1;
|
||
#endif
|
||
TPartite_array partarr;
|
||
|
||
partarr.add_numreg(numreg);
|
||
if (partarr.items() > 0)
|
||
{
|
||
TSchedaPE sc;
|
||
bool pag_udated = false;
|
||
|
||
sc.lfile().curr() = sch;
|
||
sc.read(_isequal, _lock);
|
||
const real totrit = sc.lfile().get_real(SCH_TOTRIT);
|
||
const real totale = sc.lfile().get_real(SCH_TOTALE) - totrit;
|
||
const real spese = sc.lfile().get_real(SCH_SPESE);
|
||
const real iva = sc.lfile().get_real(SCH_IVA);
|
||
const real compenso = sc.lfile().get_real(SCH_COMPENSO);
|
||
real spperc = spese / totale; spperc.round(8);
|
||
real ivaperc = iva / totale; ivaperc.round(8);
|
||
|
||
const TString4 codcau = sc.lfile().get("CODCAUS");
|
||
const TRectype cau = cache().get("%CA7", codcau);
|
||
|
||
// leggo valori tabella causali per calcolo
|
||
const real h_PercAssImp = cau.get_real("R4");
|
||
const real h_PercCassaPrev = cau.get_real("R5");
|
||
const real h_PercRitenuta = cau.get_real("R0");
|
||
const real h_PercInps = cau.get_real("R1");
|
||
const real h_PercAssImpInps = cau.get_real("R2");
|
||
const real h_PercCommitInps = cau.get_real("R3");
|
||
|
||
for (TPartita* p = partarr.first(); p != NULL; p =partarr.next())
|
||
{
|
||
const int row = p->prima_fattura(numreg);
|
||
|
||
if (row >= 0)
|
||
{
|
||
TRiga_partite & rigapart = p->riga(row);
|
||
const int nrate = rigapart.rate();
|
||
TDate datapag;
|
||
|
||
for (int r = 1; r <= nrate; r++)
|
||
{
|
||
TRiga_scadenze & ratapart = rigapart.rata(r);
|
||
TImporto tot[10];
|
||
long numregp[10] = {0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L};
|
||
int lastsch = 0;
|
||
|
||
const int rows = sc.pag_items();
|
||
|
||
for (int rowp = ratapart.last(); rowp > 0; rowp = ratapart.pred(rowp))
|
||
{
|
||
const TRectype& pag = ratapart.row(rowp); // Riga pagamento
|
||
const TRiga_partite& sum = p->riga(rowp); // Riga partite
|
||
|
||
if (pag_dal.ok()) // Filtro opzionale su data pagamento
|
||
{
|
||
const TDate sum_datapag = sum.get(PART_DATAPAG);
|
||
if (sum_datapag < pag_dal)
|
||
continue;
|
||
}
|
||
|
||
const char sez = sum.sezione();
|
||
TImporto imppag(sez, pag.get_real(PAGSCA_IMPORTO));
|
||
const long num = sum.get_long(PART_NREG);
|
||
if (lastsch == 0 && numregp[0] == 0L)
|
||
{
|
||
numregp[lastsch] = num;
|
||
tot[lastsch].reset();
|
||
}
|
||
if (num != numregp[lastsch])
|
||
{
|
||
numregp[++lastsch] = num;
|
||
tot[lastsch].reset();
|
||
}
|
||
if (lastsch > 9)
|
||
{
|
||
message_box("Attenzione! Troppi pagamenti diversi per la registrazione %ld.", numreg);
|
||
break;
|
||
}
|
||
|
||
bool found = false;
|
||
imppag += TImporto(sez, pag.get_real(PAGSCA_RITENUTE));
|
||
imppag += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC));
|
||
real abbuoni = pag.get_real(PAGSCA_ABBUONI);
|
||
real abb = pag.get_real(PAGSCA_ABBUONI);
|
||
if (!abb.is_zero())
|
||
imppag += TImporto(sez, abb);
|
||
for (int i = 0; !found && i < rows; i++)
|
||
{
|
||
TRectype& pagrec = sc.pag(i);
|
||
const long numsch = pagrec.get_long(PAG_NUMREG);
|
||
found = num == numsch;
|
||
if (numsch == 0L && !found)
|
||
{
|
||
TDate data(sum.get_date(PART_DATADOC));
|
||
if (!data.ok())
|
||
data = sum.get_date(PART_DATAREG);
|
||
if (!data.ok())
|
||
data = sum.get_date(PART_DATAPAG);
|
||
const TDate datasch = pagrec.get(PAG_DATAPAG);
|
||
if (data == datasch)
|
||
{
|
||
pagrec.put(PAG_NUMREG, num);
|
||
found = true;
|
||
}
|
||
else
|
||
{
|
||
imppag.normalize('D');
|
||
|
||
real spesep = imppag.valore() * spperc;
|
||
real ivap = imppag.valore() * ivaperc;
|
||
|
||
spesep.round(TCurrency::get_firm_dec());
|
||
if (abs(spesep) > abs(spese))
|
||
spesep = spese;
|
||
ivap.round(TCurrency::get_firm_dec());
|
||
if (abs(ivap) > abs(iva))
|
||
ivap = iva;
|
||
|
||
real compensop = imppag.valore() - spesep - ivap;
|
||
compensop += compensop * h_PercRitenuta;
|
||
compensop.round(TCurrency::get_firm_dec());
|
||
if (abs(compensop) > abs(compenso))
|
||
compensop = compenso;
|
||
if (compensop == pagrec.get_real(PAG_COMPENSO))
|
||
{
|
||
pagrec.put(PAG_NUMREG, num);
|
||
found = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (!found)
|
||
{
|
||
tot[lastsch] += imppag;
|
||
if (!datapag.ok())
|
||
datapag = sum.get_date(PART_DATADOC);
|
||
if (!datapag.ok())
|
||
datapag = sum.get_date(PART_DATAREG);
|
||
if (!datapag.ok())
|
||
datapag = sum.get_date(PART_DATAPAG);
|
||
}
|
||
}
|
||
for (int j = 0; j < 10 && numregp[j] > 0L; j++)
|
||
{
|
||
tot[j].normalize('D');
|
||
if (tot[j].valore() == ZERO)
|
||
break;
|
||
|
||
TRectype & pagrec = sc.pag(rows);
|
||
|
||
pagrec.put(PAG_CODDITTA, sc.lfile().get(SCH_CODDITTA));
|
||
pagrec.put(PAG_TIPOA, sc.lfile().get(SCH_TIPOA));
|
||
pagrec.put(PAG_CODANAGR, sc.lfile().get(SCH_CODANAGR));
|
||
pagrec.put(PAG_NPROG, sc.lfile().get(SCH_NPROG));
|
||
pagrec.put(PAG_NRIGA, rows + 1);
|
||
pagrec.put(PAG_NUMVERS, -1);
|
||
real spesepag = tot[j].valore() * spperc;
|
||
real ivapag = tot[j].valore() * ivaperc;
|
||
|
||
spesepag.round(TCurrency::get_firm_dec());
|
||
if (abs(spesepag) > abs(spese))
|
||
spesepag = spese;
|
||
ivapag.round(TCurrency::get_firm_dec());
|
||
if (abs(ivapag) > abs(iva))
|
||
ivapag = iva;
|
||
|
||
real compensopag = tot[j].valore() - spesepag - ivapag;
|
||
|
||
compensopag += compensopag * h_PercRitenuta;
|
||
compensopag.round(TCurrency::get_firm_dec());
|
||
if (abs(compensopag) > abs(compenso))
|
||
compensopag = compenso;
|
||
pagrec.put(PAG_COMPENSO, compensopag);
|
||
pagrec.put(PAG_SPESA, spesepag);
|
||
pagrec.put(PAG_DATAPAG, datapag);
|
||
sc.lfile().put(SCH_ANNOC, datapag.year());
|
||
sc.lfile().put(SCH_MESEC, datapag.month());
|
||
pagrec.put(PAG_PERC, h_PercRitenuta); // percentuale ritenuta acconto
|
||
pagrec.put(PAG_ALQIMP10, h_PercAssImpInps);// percentuale 10% INPS
|
||
pagrec.put(PAG_NUMREG, numregp[j]);
|
||
pagrec.put(PAG_COD10, "C");
|
||
calcola_riga_pag(pagrec, h_PercAssImp, h_PercCassaPrev, h_PercRitenuta, h_PercInps, h_PercAssImpInps, h_PercCommitInps);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
sc.rewrite();
|
||
}
|
||
}
|
||
}
|
||
|
||
static TDate _pag_dal;
|
||
|
||
static bool schede(const TRelation& rel, void* pJolly)
|
||
{
|
||
const TRectype& sch = rel.curr();
|
||
TSchedaPercipienti* schper = (TSchedaPercipienti *) pJolly;
|
||
schper->agg_pagamenti(sch, _pag_dal);
|
||
return true;
|
||
}
|
||
|
||
bool TSchedaPercipienti::aggpag_handler(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_SPACE)
|
||
{
|
||
TMask mp(TR("Aggiorna pagamenti"), 1, 32, 6);
|
||
mp.add_date(101, 0, PR("Data iniziale "), 1, 1);
|
||
mp.add_button(DLG_OK, 0, "", -12, -1, 9, 2);
|
||
mp.add_button(DLG_CANCEL, 0, "", -22, -1, 9, 2);
|
||
const bool ok = mp.run() == K_ENTER;
|
||
if (ok)
|
||
{
|
||
_pag_dal = mp.get(101);
|
||
|
||
TLocalisamfile fsch(LF_SCPERC);
|
||
TRectype from(LF_SCPERC);
|
||
from.put("CODDITTA", get_firm_770());
|
||
TRelation rel(LF_SCPERC);
|
||
TCursor c(&rel, "", 1, &from, &from);
|
||
c.scan(schede, &app(), TR("Aggiornamento schede"));
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool TSchedaPercipienti::esiste_perc(const TMask& m, const char* codanag)
|
||
{
|
||
const char tipoa = m.get(F_TIPOA)[0];
|
||
const TString8 codanagr(codanag && *codanag ? codanag : m.get(F_CODANAGR));
|
||
|
||
// Controllo che l'anagrafica esista
|
||
TString8 key; key.format("%c|%ld", tipoa, atol(codanagr));
|
||
const TRectype& anag = cache().get(LF_ANAG, key);
|
||
const bool esiste_anagr = !anag.empty();
|
||
|
||
// memorizzo flag soggetto non residente nel dato membro usato
|
||
// nei controlli
|
||
if (esiste_anagr)
|
||
_soggnres = anag.get_bool(ANA_SOGGNRES);
|
||
|
||
return esiste_anagr;
|
||
}
|
||
|
||
// Passa al modo inserimento/modifica.
|
||
bool TSchedaPercipienti::nprog_handler(TMask_field& f, KEY key)
|
||
{
|
||
if (!f.mask().is_running())
|
||
return TRUE;
|
||
|
||
if (key == K_CTRL+K_TAB)
|
||
{
|
||
f.set_dirty();
|
||
return TRUE;
|
||
}
|
||
|
||
const int nprog = atoi(f.get());
|
||
|
||
if (key == K_ENTER)
|
||
if (app()._flag_cg)
|
||
{
|
||
app()._flag_cg = FALSE; // avoid recursion
|
||
if (nprog==0 || !app().esiste_perc(f.mask()))
|
||
return false;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TSchedaPercipienti::user_create()
|
||
{
|
||
_per = new TLocalisamfile(LF_PERC);
|
||
_rel = new TSchedaPE;
|
||
_rver = new TLocalisamfile(LF_RVER);
|
||
_rpag = new TLocalisamfile(LF_RPAG);
|
||
|
||
_pags = new TNikArray_sheet(-1, -1, -4, -4, TR("Selezione Pagamenti"),
|
||
HR("@1|Data@11|Compenso@16|Ritenuta@16|"),
|
||
0, NULL_WIN, 5);
|
||
|
||
set_search_field(F_CODANAGRPERC);
|
||
|
||
// simulo una chiamata da contabilit<69> (lo lascio per eventuali prove)
|
||
/* real totdocla = 1000000;
|
||
real spesela = ZERO;
|
||
real compensola = 1000000;
|
||
real impostela = ZERO;
|
||
real ritenutela = ZERO;
|
||
TToken_string s(80);
|
||
s.add(pagamento);
|
||
s.add("M");
|
||
s.add("G");
|
||
s.add(805);
|
||
s.add(15633);
|
||
s.add("7");
|
||
s.add("04-01-2010");
|
||
s.add(totdocla.string());
|
||
s.add(spesela.string());
|
||
s.add(compensola.string());
|
||
s.add(impostela.string());
|
||
s.add(ritenutela.string());
|
||
const char* name = "770 -0";
|
||
TMessage mla(name, "LINK770", s);
|
||
mla.send(); */
|
||
|
||
// Collegamento da contabilita'
|
||
TMailbox m;
|
||
TMessage* msg = m.next_s("LINK770");
|
||
|
||
if (msg != NULL)
|
||
{
|
||
if ( !_coll.read(msg->body()) )
|
||
{
|
||
NFCHECK("Errore nei parametri passati");
|
||
return false;
|
||
}
|
||
|
||
const long ditta = get_firm_770();
|
||
if (!exist_dichiar_770(ditta))
|
||
{
|
||
if (yesno_box(FR("Creare la dichiarazione per la ditta %ld"), ditta))
|
||
{
|
||
if (!enter_dichiar_770(ditta))
|
||
{
|
||
NFCHECK("Creazione dichiarazione fallita!");
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
load_mask(0);
|
||
|
||
return true;
|
||
}
|
||
|
||
bool TSchedaPercipienti::user_destroy()
|
||
{
|
||
if (_msk[1] != NULL) delete _msk[1];
|
||
if (_msk[0] != NULL) delete _msk[0];
|
||
|
||
delete _rel; delete _per; delete _rver;
|
||
delete _rpag; delete _pags;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
//
|
||
// COMPILA_TESTATA
|
||
//
|
||
// Usata nel collegamento da cg
|
||
//
|
||
void TSchedaPercipienti::compila_testata(TMask& m)
|
||
{
|
||
m.set(F_DATADOC, _coll._datadoc);
|
||
m.set(F_NUMDOC, _coll._numdoc);
|
||
m.set(F_IVA, _coll._imposte.string());
|
||
m.set(F_SPESE, _coll._spese.string());
|
||
m.set(F_COMPENS, _coll._compenso.string());
|
||
m.set(F_NUMREG, _coll._numreg);
|
||
|
||
switch (tipo_coll())
|
||
{
|
||
case occasionale:
|
||
m.set(F_COMPENS, _coll._compenso.string());
|
||
m.set(F_TOTDOC, _coll._compenso.string());
|
||
break;
|
||
case fattura:
|
||
m.set(F_TOTDOC, _coll._totdoc.string());
|
||
m.set(F_TOTRIT, _coll._ritenute.string());
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
bool TSchedaPercipienti::coll_variazione() const
|
||
{
|
||
return _coll._immissione == 'M' || tipo_coll() == pagamento ||
|
||
tipo_coll() == pagamento_piu_perc;
|
||
}
|
||
|
||
const TString& TSchedaPercipienti::get_ragsoc(const char* tipoa, const long codanagr) const
|
||
{
|
||
TString8 key; key.format("%c|%ld", *tipoa, codanagr);
|
||
return cache().get(LF_ANAG, key, ANA_RAGSOC);
|
||
}
|
||
|
||
void TSchedaPercipienti::init_modify_mode(TMask& m)
|
||
{
|
||
_from_modify = TRUE;
|
||
_codanagr = m.get_long(F_CODANAGR);
|
||
_tipoa = m.get(F_TIPOA);
|
||
_ragsoc = get_ragsoc(_tipoa, _codanagr);
|
||
|
||
// inizilizza maschera
|
||
init_mask(m, false);
|
||
}
|
||
|
||
void TSchedaPercipienti::init_insert_mode(TMask& m)
|
||
{
|
||
init_mask(m);
|
||
|
||
// La proposta causale <20> valida con e senza collegamneto da prima nota
|
||
TToken_string key; key.format("%c|%ld", m.get(F_TIPOA)[0], m.get_long(F_CODANAGR));
|
||
TString4 codcaus = cache().get(LF_ANAG, key, "CAUSQUA");
|
||
if (codcaus.blank())
|
||
{
|
||
key.format("%ld|%c|%ld|%d",
|
||
m.get_long(F_CODDITTA), m.get(F_TIPOA)[0],
|
||
m.get_long(F_CODANAGR), m.get_int(F_NPROG)-1);
|
||
codcaus = cache().get(LF_SCPERC, key, SPR_CODCAUS);
|
||
}
|
||
if (codcaus.full())
|
||
{
|
||
const TRectype& caus = cache().get("%CA7", codcaus);
|
||
build_causqua_items(m, caus.get("S1"));
|
||
m.set(F_CODCAUS, codcaus, 0x3);
|
||
m.set(F_CAUSQUA, caus.get("S2"));
|
||
}
|
||
}
|
||
|
||
void TSchedaPercipienti::on_config_change()
|
||
{
|
||
_anno_dic = ini_get_int(CONFIG_STUDIO, "77", ANNO_SEL);
|
||
}
|
||
|
||
void TSchedaPercipienti::init_query_mode(TMask& m)
|
||
{
|
||
m.set(F_ANNODIC, _anno_dic);
|
||
|
||
// Controllo se chiamata dalla contabilita'
|
||
if (tipo_coll() != nessuno)
|
||
{
|
||
const bool variazione = coll_variazione();
|
||
_flag_cg = TRUE;
|
||
TString4 tipo;
|
||
tipo << _coll._tipo;
|
||
m.set(F_TIPOA, tipo);
|
||
if (_coll._codanagr != 0L)
|
||
{
|
||
m.set(F_CODANAGR, _coll._codanagr);
|
||
m.set(F_CODANAGRPERC, _coll._codanagr);
|
||
m.set(F_CODANAGRCOM, _coll._codanagr);
|
||
}
|
||
|
||
switch (tipo_coll())
|
||
{
|
||
case fattura:
|
||
setta_nprog(m, variazione);
|
||
m.send_key(K_AUTO_ENTER,0);
|
||
return;
|
||
break;
|
||
case pagamento:
|
||
if (coll_datanum())
|
||
{
|
||
if (setta_nprog(m, variazione))
|
||
m.send_key(K_AUTO_ENTER,0);
|
||
}
|
||
return;
|
||
break;
|
||
case occasionale:
|
||
m.send_key(K_AUTO_ENTER, 0);
|
||
return;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (_from_modify)
|
||
{
|
||
m.set(F_TIPOA, _tipoa);
|
||
m.set(F_CODANAGR, _codanagr);
|
||
m.set(F_CODANAGRPERC, _codanagr);
|
||
m.set(F_CODANAGRCOM, _codanagr);
|
||
m.set(F_RAGSOCPER, _ragsoc);
|
||
m.set(F_RAGSOCCOM, _ragsoc);
|
||
}
|
||
else
|
||
{
|
||
m.hide(-1); // group 1 Scelta ANAGR
|
||
m.show(-2); // group 3 Ricerca su DATI PER
|
||
}
|
||
|
||
_from_modify = FALSE;
|
||
|
||
// forza il ricalcolo dell'ultimo numero disponibile
|
||
const TString& dummy = m.get(F_NPROG);
|
||
if (dummy.full())
|
||
setta_nprog(m);
|
||
}
|
||
|
||
void TSchedaPercipienti::init_query_insert_mode(TMask& m)
|
||
{
|
||
m.set(F_ANNODIC, _anno_dic);
|
||
|
||
// Se vengo da modifica mantieni la selezione precedente
|
||
if (_from_modify)
|
||
{
|
||
m.set(F_TIPOA, _tipoa);
|
||
m.set(F_CODANAGR, _codanagr);
|
||
m.set(F_CODANAGRPERC, _codanagr);
|
||
m.set(F_CODANAGRCOM, _codanagr);
|
||
m.set(F_RAGSOCPER, _ragsoc);
|
||
m.set(F_RAGSOCCOM, _ragsoc);
|
||
}
|
||
else
|
||
{
|
||
m.hide(-2); // group 3 Nasconde ricerca su PERC
|
||
m.show(-1); // group 1 Ricerca su ANAGR
|
||
}
|
||
}
|
||
|
||
void TSchedaPercipienti::rec2row(TToken_string& r, TRectype& rec, int row)
|
||
{
|
||
TString16 dver, dpag, serie, numero, rite;
|
||
TString16 comp, impo, perc, spesa, netto;
|
||
TString16 nrigavers, numpag, progrbanca;
|
||
TString SsnPerc, SsnCompl;
|
||
|
||
r = "";
|
||
if (rec.num() == LF_RVER)
|
||
{
|
||
char v1015 = rec.get_bool("VERS1015") ? 'X' : ' ';
|
||
dver = rec.get("DATAVERS");
|
||
char tv = rec.get_char("TIPOVERS");
|
||
char lv = rec.get_char("LUOVERS");
|
||
serie = rec.get("SERIE");
|
||
numero = rec.get("NUMERO");
|
||
rite = rec.get("RITENUTA");
|
||
progrbanca = rec.get("PROGBANC");
|
||
nrigavers = rec.get("NRIGA");
|
||
|
||
if (rite.empty()) rite = " ";
|
||
if (progrbanca.empty()) progrbanca = " ";
|
||
if (nrigavers.empty()) nrigavers = " ";
|
||
if (serie.empty()) serie = " ";
|
||
if (numero.empty()) numero = " ";
|
||
|
||
r.add(v1015, 0);
|
||
r.add(dver,1);
|
||
r.add(lv == '\0' ? ' ' : lv);
|
||
r.add(tv == '\0' ? ' ' : tv);
|
||
r.add(serie);
|
||
r.add(numero);
|
||
r.add(progrbanca);
|
||
r.add(rite);
|
||
r.add(nrigavers);
|
||
|
||
if (v1015 == 'X')
|
||
disable_vers_cells(row);
|
||
else
|
||
enable_vers_cells(row);
|
||
}
|
||
|
||
if (rec.num() == LF_RPAG)
|
||
{
|
||
// istanza struttura pagamento
|
||
Pag_struct s;
|
||
|
||
// compilo campi struttura
|
||
s.datapag = rec.get_date("DATAPAG");
|
||
s.imponibile = rec.get_real("IMPONIBILE");
|
||
s.perc = rec.get_real("PERC");
|
||
s.ritenuta = rec.get_real("RITENUTA");
|
||
s.compenso = rec.get_real("COMPENSO");
|
||
s.netto = rec.get_real("NETTO");
|
||
s.numvers = rec.get_long("NUMVERS");
|
||
s.spesa = rec.get_real("SPESA");
|
||
s.ctssnperc = rec.get_real("CTSSNPERC");
|
||
s.ctssncomp = rec.get_real("CTSSNCOMP");
|
||
s.ritlorda = rec.get_real("RITLORDA");
|
||
s.controbb = rec.get_real("CONTROBB");
|
||
s.detfamil = rec.get_real("DETFAMIL");
|
||
s.detlavdip = rec.get_real("DETLAVDIP");
|
||
s.totdet = rec.get_real("TOTDET");
|
||
s.giolavdip = rec.get_int("GIOLAVDIP");
|
||
s.impcpa = rec.get_real("IMPCPA");
|
||
s.somregconv = rec.get_real("SOMREGCONV");
|
||
s.alqimp10 = rec.get_real("ALQIMP10");
|
||
s.cod10 = rec.get("COD10");
|
||
s.utpagati = rec.get_real("UTPAGATI");
|
||
s.utspett = rec.get_real("UTSPETT");
|
||
s.ritutpag = rec.get_real("RITUTPAG");
|
||
s.ritutspe = rec.get_real("RITUTSPE");
|
||
s.nquote = rec.get_real("NQUOTE");
|
||
s.somnsrit = rec.get_real("SOMNSRIT");
|
||
s.ammlordo = rec.get_real("AMMLORDO");
|
||
s.quotaprov = rec.get_real("QUOTAPROV");
|
||
s.impnetto = rec.get_real("IMPNETTO");
|
||
s.comnetto = rec.get_real("COMNETTO");
|
||
s.numreg = rec.get_long(PAG_NUMREG);
|
||
|
||
// compilo riga di sheet
|
||
from_struct_to_sheet(s, r);
|
||
}
|
||
}
|
||
|
||
int TSchedaPercipienti::read(TMask& m)
|
||
{
|
||
m.autoload(*_rel);
|
||
|
||
// reperische sheet attivo forzando l'abilitazione in base al quadro
|
||
// ci<63> <20> necessario per attivare lo sheet corretto quando
|
||
// si esce/entra dalle singole schede
|
||
TSheet_field& pags = pag_sheet_enabled(m,TRUE);
|
||
|
||
pags.destroy();
|
||
int r;
|
||
for (r = 0; r < _rel->pag_items(); r++)
|
||
rec2row(pags.row(r), _rel->pag(r), r);
|
||
|
||
TSheet_field& vers = (TSheet_field&)m.field(F_VERSAMENTI);
|
||
vers.destroy();
|
||
|
||
for (r = 0; r < _rel->ver_items(); r++)
|
||
rec2row(vers.row(r), _rel->ver(r), r);
|
||
|
||
return 0;
|
||
}
|
||
|
||
void TSchedaPercipienti::enable_vers_cells(int r, bool enable)
|
||
{
|
||
TSheet_field& ver = vers();
|
||
// calcolo numero di colonne utili (scartando l'ultima)
|
||
int num_col = ver.row(r).items() - 1;
|
||
// abilito/disabilito celle
|
||
for (int i=1; i<num_col; i++)
|
||
enable ? ver.enable_cell(r,i) : ver.disable_cell(r,i);
|
||
}
|
||
|
||
void TSchedaPercipienti::new_row(TSheet_field& ver_pag, int r, bool vers)
|
||
{
|
||
TToken_string& riga = ver_pag.row(r);
|
||
|
||
if (vers)
|
||
riga.add(++_lastvers, COLONNE_SIGNIFICATIVE_SPREADSHEET_VERSAMENTI);
|
||
else
|
||
riga.add(-1, num_sheet_column() - 1);
|
||
}
|
||
|
||
//
|
||
// FILL_SHEET
|
||
//
|
||
// Determino QUI un progressivo unico per i pagamenti e i versamenti
|
||
// (NUMVERS e NUMPAG: vedi new_row())
|
||
void TSchedaPercipienti::fill_sheet(TMask& m)
|
||
{
|
||
// leggo codice quadro
|
||
TString16 qua(m.get(F_CODQUA));
|
||
|
||
TSheet_field& pags = pag_sheet_enabled(m);
|
||
int r;
|
||
for (r = pags.items(); r < 16; r++)
|
||
new_row(pags, r, FALSE);
|
||
|
||
TSheet_field& vers = (TSheet_field&)m.field(F_VERSAMENTI);
|
||
for (r = vers.items(); r < 16; r++)
|
||
new_row(vers, r, TRUE);
|
||
}
|
||
|
||
bool TSchedaPercipienti::scrivi_dati_per(TRectype& rec)
|
||
{
|
||
TLocalisamfile dati_per(LF_PERC);
|
||
const long codditta = rec.get_long("CODDITTA");
|
||
char tipoa = rec.get_char("TIPOA");
|
||
const long codanagr = rec.get_long("CODANAGR");
|
||
|
||
dati_per.zero();
|
||
dati_per.put("CODDITTA", codditta);
|
||
dati_per.put("TIPOA", tipoa);
|
||
dati_per.put("CODANAGR", codanagr);
|
||
|
||
const bool preesistente = (dati_per.read() == NOERR);
|
||
|
||
if (!preesistente)
|
||
{
|
||
dati_per.zero();
|
||
dati_per.put("CODDITTA", codditta);
|
||
dati_per.put("TIPOA", tipoa);
|
||
dati_per.put("CODANAGR", codanagr);
|
||
|
||
dati_per.write();
|
||
}
|
||
|
||
return preesistente;
|
||
}
|
||
|
||
int TSchedaPercipienti::rewrite(const TMask& m)
|
||
{
|
||
mask2rel(m);
|
||
const int err = _rel->rewrite();
|
||
scrivi_dati_per(_rel->curr());
|
||
return err;
|
||
}
|
||
|
||
int TSchedaPercipienti::write(const TMask& m)
|
||
{
|
||
mask2rel(m);
|
||
const int err = _rel->write();
|
||
scrivi_dati_per(_rel->curr());
|
||
return err;
|
||
}
|
||
|
||
bool TSchedaPercipienti::check_compensi(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_ENTER)
|
||
{
|
||
const bool forzatura = f.mask().get_bool(F_FORCED);
|
||
real doc_compenso(f.get());
|
||
|
||
if (app()._tot_compenso > doc_compenso)
|
||
{
|
||
f.warning_box("Il totale dei compensi non puo' superare\n"
|
||
"il compenso indicato nel documento");
|
||
|
||
return forzatura;
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TSchedaPercipienti::check_spese(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_ENTER)
|
||
{
|
||
const bool forzatura = f.mask().get_bool(F_FORCED);
|
||
real doc_spese(f.get());
|
||
|
||
if (app()._tot_spese > doc_spese)
|
||
{
|
||
f.warning_box ("Il totale delle spese non puo' superare\n"
|
||
"la spesa indicata nel documento");
|
||
return forzatura;
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TSchedaPercipienti::check_competenza(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_ENTER)
|
||
{
|
||
const bool forzatura = f.mask().get_bool(F_FORCED);
|
||
int anno_competenza(f.mask().get_int(F_ANNOCOMP));
|
||
int mese_competenza(f.mask().get_int(F_MESECOMP));
|
||
|
||
if (anno_competenza && !mese_competenza)
|
||
{
|
||
f.warning_box ("Indicare anche il mese di competenza");
|
||
return forzatura;
|
||
}
|
||
|
||
if (!anno_competenza && mese_competenza)
|
||
{
|
||
f.warning_box ("Indicare anche l'anno competenza");
|
||
return forzatura;
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
//
|
||
// Calcola:
|
||
//
|
||
// totale compensi
|
||
// totale spese
|
||
// totale netti pagati
|
||
//
|
||
// - NB -
|
||
// FUNZIONA SOLO SE PASSA PRIMA DI QUA!
|
||
//
|
||
bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
|
||
{
|
||
if (k == K_ENTER)
|
||
{
|
||
TMask& m = f.mask();
|
||
|
||
const bool forzatura = m.get_bool(F_FORCED);
|
||
int i;
|
||
TArray& rpag = app().pags().rows_array();
|
||
|
||
app()._tot_compenso = ZERO;
|
||
app()._tot_spese = ZERO;
|
||
app()._tot_rit = ZERO;
|
||
|
||
// Calcolo totale compensi, totale spese e totale ritenute
|
||
for (i = 0; i < rpag.items(); i++)
|
||
{
|
||
TToken_string& row = (TToken_string&)rpag[i];
|
||
|
||
if (app().my_empty_items(row, FALSE)) continue;
|
||
|
||
real compenso = ZERO;
|
||
real spese = ZERO;
|
||
real ritenuta = ZERO;
|
||
real netto = ZERO;
|
||
|
||
int pos;
|
||
if ((pos = app().token_pos("COMPENSO")) != -1)
|
||
compenso = row.get(pos);
|
||
if ((pos = app().token_pos("SPESA")) != -1)
|
||
spese = row.get(pos);
|
||
if ((pos = app().token_pos("RITENUTA")) != -1)
|
||
ritenuta = row.get(pos);
|
||
|
||
app()._tot_compenso += compenso;
|
||
app()._tot_spese += spese;
|
||
app()._tot_rit += ritenuta;
|
||
}
|
||
|
||
TArray& rver = app().vers().rows_array();
|
||
app()._tot_vers = ZERO;
|
||
|
||
// Calcola totale versato
|
||
for (i = 0; i < rver.items(); i++)
|
||
{
|
||
TToken_string& row = (TToken_string&)rver[i];
|
||
if (app().my_empty_items(row, TRUE))
|
||
continue;
|
||
real versato (row.get(7));
|
||
app()._tot_vers += versato;
|
||
}
|
||
|
||
const int fdec = TCurrency::get_firm_dec();
|
||
app()._tot_rit.round(fdec);
|
||
app()._tot_vers.round(fdec);
|
||
|
||
// memorizzo i totali ritenute pagate/versate
|
||
m.set(F_RITOPE, app()._tot_rit);
|
||
m.set(F_RITVER, app()._tot_vers);
|
||
|
||
const real diff = abs(app()._tot_vers - app()._tot_rit);
|
||
|
||
if (app()._tot_vers != ZERO && diff > ZERO)
|
||
{
|
||
const bool in_euro = is_euro_value("");
|
||
const real THRESOLD = in_euro ? 0.50 : 500.0;
|
||
const bool war = in_euro ? (diff >= THRESOLD) : (diff > THRESOLD);
|
||
if (war)
|
||
{
|
||
f.warning_box("La differenza tra il totale dei versamenti "
|
||
"ed il totale delle ritenute non puo' superare %s %s",
|
||
THRESOLD.string(), in_euro ? "Euro" : "Lire");
|
||
return forzatura;
|
||
}
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
// Trasferisce i dati dalla maschera alla relazione
|
||
void TSchedaPercipienti::mask2rel(const TMask& m)
|
||
{
|
||
// Assicurati che siano calcolate le ritenute
|
||
if (_tot_rit.is_zero() || _tot_vers.is_zero())
|
||
{
|
||
TMask_field& datadoc = m.field(F_DATADOC);
|
||
check_handler(datadoc, K_ENTER);
|
||
}
|
||
|
||
_rel->lfile().zero();
|
||
m.autosave(*_rel);
|
||
|
||
// leggo chiave scheda
|
||
const long codditta = m.get_long(F_CODDITTA);
|
||
const char tipoa = m.get(F_TIPOA)[0];
|
||
const long codanagr = m.get_long(F_CODANAGR);
|
||
const int nprogr = m.get_int(F_NPROG);
|
||
|
||
// leggo valori tabella causali per calcolo
|
||
const real h_PercAssImp = m.get_real(F_QUOTAIMP);
|
||
const real h_PercCassaPrev = m.get_real(F_CASSA_PREV);
|
||
const real h_PercRitenuta = m.get_real(F_PERRIT);
|
||
const bool h_FlagInps = m.get_bool(F_FLAG_INPS);
|
||
const real h_PercInps = m.get_real(F_PERC_INPS);
|
||
const real h_PercAssImpInps = m.get_real(F_PERC_ASS_INPS);
|
||
const real h_PercCommitInps = m.get_real(F_PERC_COMMIT_INPS);
|
||
|
||
// istanza struttura di comodo per calcolo riga pagamenti
|
||
Pag_struct c;
|
||
|
||
_rel->destroy_rows(); // Destroy all records
|
||
pag_pack(); // Destroy all null rows
|
||
|
||
// salva pagamenti
|
||
TArray& rows = pags().rows_array();
|
||
const int pag_rows = rows.items();
|
||
|
||
//se trova vuoti i campi mese o anno di competenza vi copia i valori della data sulla riga
|
||
//controlla che ci sia l'enter di uscita dalla riga, che il campo data sia pieno
|
||
//03/05/2011
|
||
if (pag_rows > 0)
|
||
{
|
||
TRectype& scperc_rec = _rel->curr(LF_SCPERC);
|
||
if (scperc_rec.get_int(SPR_MESEC) <= 0 || scperc_rec.get_int(SPR_ANNOC) <= 0)
|
||
{
|
||
const TDate datapag = pags().cell(0, 0);
|
||
scperc_rec.put(SPR_MESEC, datapag.month());
|
||
scperc_rec.put(SPR_ANNOC, datapag.year());
|
||
}
|
||
}
|
||
|
||
int i;
|
||
for (i = 0; i < pag_rows; i++)
|
||
{
|
||
TToken_string& row = (TToken_string&)rows[i];
|
||
TRectype &r = _rel->pag(i);
|
||
|
||
long nriga = i + 1;
|
||
|
||
// compilo campi chiave
|
||
r.zero();
|
||
r.put("CODDITTA", codditta);
|
||
r.put("TIPOA", tipoa);
|
||
r.put("CODANAGR", codanagr);
|
||
r.put("NPROG", nprogr);
|
||
r.put("NRIGA", nriga);
|
||
|
||
// compilo struttura rigo di pagamento
|
||
Pag_struct s;
|
||
from_sheet_to_struct(row, s);
|
||
|
||
// ricalcolo riga pagamento
|
||
// (per ottenere la congruit<69> dei dati semplicemente
|
||
// registrando la scheda)
|
||
c.numreg = s.numreg;
|
||
calcola_riga_pag(s,
|
||
c,
|
||
FALSE,
|
||
h_PercAssImp,
|
||
h_PercCassaPrev,
|
||
h_PercRitenuta,
|
||
h_PercInps,
|
||
h_PercAssImpInps,
|
||
h_PercCommitInps);
|
||
|
||
// compilo restanti campi
|
||
r.put("DATAPAG", s.datapag);
|
||
r.put("IMPONIBILE",s.imponibile);
|
||
r.put("PERC", s.perc);
|
||
r.put("RITENUTA", s.ritenuta);
|
||
r.put("COMPENSO", s.compenso);
|
||
r.put("NETTO",s.netto);
|
||
r.put("NUMVERS", s.numvers);
|
||
r.put("SPESA", s.spesa);
|
||
r.put("CTSSNPERC", s.ctssnperc);
|
||
r.put("CTSSNCOMP", s.ctssncomp);
|
||
r.put("RITLORDA", s.ritlorda);
|
||
r.put("CONTROBB", s.controbb);
|
||
r.put("DETFAMIL", s.detfamil);
|
||
r.put("DETLAVDIP", s.detlavdip);
|
||
r.put("TOTDET", s.totdet);
|
||
r.put("GIOLAVDIP", s.giolavdip);
|
||
r.put("IMPCPA", s.impcpa);
|
||
r.put("SOMREGCONV", s.somregconv);
|
||
r.put("ALQIMP10", s.alqimp10);
|
||
r.put("COD10", s.cod10);
|
||
r.put("UTPAGATI", s.utpagati);
|
||
r.put("UTSPETT", s.utspett);
|
||
r.put("RITUTPAG", s.ritutpag);
|
||
r.put("RITUTSPE", s.ritutspe);
|
||
r.put("NQUOTE", s.nquote);
|
||
r.put("SOMNSRIT", s.somnsrit);
|
||
r.put("AMMLORDO", s.ammlordo);
|
||
r.put("QUOTAPROV", s.quotaprov);
|
||
r.put("IMPNETTO", s.impnetto);
|
||
r.put("COMNETTO", s.comnetto);
|
||
r.put(PAG_NUMREG, s.numreg);
|
||
}
|
||
|
||
// salva versamenti
|
||
rows = vers().rows_array();
|
||
for (i = 0; i < rows.items(); i++)
|
||
{
|
||
TToken_string& row = (TToken_string&)rows[i];
|
||
TRectype &r = _rel->ver(i);
|
||
|
||
if (my_empty_items(row, TRUE))
|
||
continue; // non salvare righe vuote
|
||
|
||
long nriga = i+1;
|
||
|
||
r.zero();
|
||
r.put("CODDITTA", codditta);
|
||
r.put("TIPOA", tipoa);
|
||
r.put("CODANAGR", codanagr);
|
||
r.put("NPROG", nprogr);
|
||
r.put("NRIGA", nriga);
|
||
|
||
// LEGGO SPREADSHEET VERSAMENTI
|
||
const bool vers1015 = (row.get_char(0) == 'X');
|
||
TString16 datav = row.get(1);
|
||
const TDate dataver(datav);
|
||
|
||
const char luogo = row.get_char(2);
|
||
const char tipo = row.get_char(3);
|
||
|
||
const TString16 serie(row.get(4));
|
||
const TString16 numero(row.get(5));
|
||
const long ProgBanca(row.get_long(6));
|
||
const real ritenuta (row.get(7));
|
||
const int numvers (row.get_int(8));
|
||
|
||
r.put("VERS1015",vers1015);
|
||
r.put("DATAVERS",dataver);
|
||
r.put("LUOVERS", luogo);
|
||
r.put("TIPOVERS",tipo);
|
||
r.put("SERIE", serie);
|
||
r.put("NUMERO", numero);
|
||
r.put("PROGBANC",ProgBanca);
|
||
r.put("RITENUTA",ritenuta);
|
||
}
|
||
}
|
||
|
||
TMask& TSchedaPercipienti::TheMask() const
|
||
{
|
||
CHECK(_msk[1] != NULL, "Maschera di inserimento/modifica non ancora istanziata!");
|
||
return *_msk[1];
|
||
}
|
||
|
||
TSheet_field& TSchedaPercipienti::pag_sheet_enabled(TMask& m, bool force_enable) const
|
||
{
|
||
TSheet_field* s = NULL;
|
||
|
||
// istanza reference sheet a disposizione
|
||
TSheet_field& s_C = m.sfield(F_PAGAMENTI_C);
|
||
TSheet_field& s_E = m.sfield(F_PAGAMENTI_C);
|
||
TSheet_field& s_F = m.sfield(F_PAGAMENTI_D);
|
||
TSheet_field& s_G = m.sfield(F_PAGAMENTI_D);
|
||
|
||
// forza la disabilitazione di tutti se richiesta
|
||
// l'abilitazionein base al quadro
|
||
if (force_enable)
|
||
{
|
||
s_C.hide();
|
||
s_E.hide();
|
||
s_F.hide();
|
||
s_G.hide();
|
||
}
|
||
|
||
// valorizzo reference sheet abilitato
|
||
if (s_C.shown())
|
||
s = &s_C;
|
||
if (s_E.shown())
|
||
s = &s_E;
|
||
if (s_F.shown())
|
||
s = &s_F;
|
||
if (s_G.shown())
|
||
s = &s_G;
|
||
|
||
// se nessuno abilitato forzo l'abilitazione in base al quadro
|
||
// questo si rende necessario per il primo che invoca questo
|
||
// metodo, in quanto gli sheet sono hide alla partenza
|
||
if (s == NULL)
|
||
{
|
||
// reperisco codice quadro della scheda
|
||
TString4 qua = "C";
|
||
const TString4 codcau = _rel->lfile().get("CODCAUS");
|
||
const TRectype& cau = cache().get("%CA7", codcau);
|
||
if (!cau.empty())
|
||
qua = cau.get("S1");
|
||
|
||
// abilito sheet
|
||
s = &(enable_pag_sheet(m, qua));
|
||
|
||
// aggancio handler
|
||
set_pag_handler(*s);
|
||
}
|
||
|
||
return *s;
|
||
}
|
||
|
||
bool TSchedaPercipienti::activate_pag_sheet(TMask& m)
|
||
{
|
||
// reperisco sheet attivo da cui copiare, la Token_string pilota
|
||
// e il numero di colonne
|
||
TSheet_field& prev_s = pag_sheet_enabled(m);
|
||
TToken_string prev_pilot(pilot_sheet());
|
||
int prev_col = num_sheet_column() + 1;
|
||
|
||
// leggo codice quadro
|
||
TString16 qua(m.get(F_CODQUA));
|
||
|
||
// abilito sheet
|
||
TSheet_field& curr_s = enable_pag_sheet(m, qua);
|
||
|
||
// reperisco la Token_string pilota dallo sheet attivo
|
||
TToken_string curr_pilot(pilot_sheet());
|
||
|
||
// copia dallo sheet disattivato a quello attivato solo se non coincidono,
|
||
// preoccupandosi di spostare le colonne al posto giusto
|
||
if (prev_s.dlg() != curr_s.dlg())
|
||
{
|
||
curr_s.destroy();
|
||
for (int i=0; i<prev_s.items(); i++)
|
||
{
|
||
TToken_string curr_row;
|
||
for (int j=0; j<prev_col; j++)
|
||
{
|
||
// trovo posizione token nello sheet attivo
|
||
TString prev_token(prev_pilot.get(j));
|
||
int pos = token_pos((const char*)prev_token);
|
||
// copio solo se <20> presente nello sheet attivo
|
||
if (pos != -1)
|
||
{
|
||
TString prev_val(prev_s.row(i).get(j));
|
||
curr_row.add(prev_val, pos);
|
||
}
|
||
}
|
||
curr_s.row(i) = curr_row;
|
||
}
|
||
}
|
||
|
||
// ricalcolo tutte le righe pagamento
|
||
const real h_PercAssImp = m.get_real(F_QUOTAIMP);
|
||
const real h_PercCassaPrev = m.get_real(F_CASSA_PREV);
|
||
const real h_PercRitenuta = m.get_real(F_PERRIT);
|
||
const bool h_FlagInps = m.get_bool(F_FLAG_INPS);
|
||
const real h_PercInps = m.get_real(F_PERC_INPS);
|
||
const real h_PercAssImpInps = m.get_real(F_PERC_ASS_INPS);
|
||
const real h_PercCommitInps = m.get_real(F_PERC_COMMIT_INPS);
|
||
// istanza strutture per calcolo
|
||
Pag_struct c;
|
||
Pag_struct s;
|
||
// elaboro le righe di pagamento
|
||
for (int r = 0; r < curr_s.items(); r++)
|
||
{
|
||
TToken_string& t = curr_s.row(r);
|
||
if (!my_empty_items(t, false))
|
||
{
|
||
from_sheet_to_struct(t, s);
|
||
calcola_riga_pag(s,
|
||
c,
|
||
true,
|
||
h_PercAssImp,
|
||
h_PercCassaPrev,
|
||
h_PercRitenuta,
|
||
h_PercInps,
|
||
h_PercAssImpInps,
|
||
h_PercCommitInps);
|
||
from_struct_to_sheet(s, t);
|
||
}
|
||
}
|
||
|
||
// aggancio handler pagamenti
|
||
set_pag_handler(curr_s);
|
||
|
||
// forzo ridisegno dello sheet a video
|
||
curr_s.force_update();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int TSchedaPercipienti::num_sheet_column() const
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// ritorno il numero di colonne ignorando l'ultima
|
||
// che <20> ad uso interno
|
||
return columns.items()-1;
|
||
}
|
||
|
||
int TSchedaPercipienti::token_pos(const char* t) const
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// ritorno la posizione del token richiesto
|
||
return columns.get_pos(t);
|
||
}
|
||
|
||
int TSchedaPercipienti::token_dlg(const char* t) const
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// ritorno l'identificatore del token richiesto
|
||
int dlg = columns.get_pos(t);
|
||
if (dlg != -1)
|
||
dlg += 101;
|
||
return dlg;
|
||
}
|
||
|
||
const char* TSchedaPercipienti::pilot_sheet() const
|
||
{
|
||
// reperisco sheet attivo
|
||
TSheet_field& s = pag_sheet_enabled(TheMask());
|
||
|
||
// individuo la testata giusta
|
||
char* columns;
|
||
int dlg = s.dlg();
|
||
switch(dlg)
|
||
{
|
||
case F_PAGAMENTI_C : columns = (char*)PILOT_SHEET[0]; break;
|
||
case F_PAGAMENTI_D : columns = (char*)PILOT_SHEET[1]; break;
|
||
// esistevano nel vecchio caso
|
||
// case F_PAGAMENTI_DB : columns = (char*)PILOT_SHEET[2]; break;
|
||
// case F_PAGAMENTI_G : columns = (char*)PILOT_SHEET[3]; break;
|
||
default : break;
|
||
}
|
||
|
||
// ritorno la Token_string pilota
|
||
return columns;
|
||
}
|
||
|
||
Pag_struct& TSchedaPercipienti::from_sheet_to_struct(TToken_string& t, Pag_struct& s)
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// azzero struttura
|
||
clear_struct(s);
|
||
|
||
// posizione dell'informazione all'interno della Token_string
|
||
int pos;
|
||
|
||
// set data pagamento
|
||
if ((pos = token_pos("DATAPAG")) != -1)
|
||
{
|
||
TString16 datap = t.get(pos);
|
||
s.datapag = datap;
|
||
}
|
||
|
||
// set imponibile
|
||
if ((pos = token_pos("IMPONIBILE")) != -1)
|
||
s.imponibile = t.get(pos);
|
||
|
||
// set percentuale ritenuta
|
||
if ((pos = token_pos("PERC")) != -1)
|
||
s.perc = t.get(pos);
|
||
|
||
// set ritenuta
|
||
if ((pos = token_pos("RITENUTA")) != -1)
|
||
s.ritenuta = t.get(pos);
|
||
|
||
// set compenso
|
||
if ((pos = token_pos("COMPENSO")) != -1)
|
||
s.compenso = t.get(pos);
|
||
|
||
// set compenso netto
|
||
if ((pos = token_pos("NETTO")) != -1)
|
||
s.netto = t.get(pos);
|
||
|
||
// set numero versamento collegato
|
||
if ((pos = token_pos("NUMVERS")) != -1)
|
||
s.numvers = t.get_long(pos);
|
||
|
||
// set spesa
|
||
if ((pos = token_pos("SPESA")) != -1)
|
||
s.spesa = t.get(pos);
|
||
|
||
// set contr.10% percipiente
|
||
if ((pos = token_pos("CTSSNPERC")) != -1)
|
||
s.ctssnperc = t.get(pos);
|
||
|
||
// set contr.10% complessivo
|
||
if ((pos = token_pos("CTSSNCOMP")) != -1)
|
||
s.ctssncomp = t.get(pos);
|
||
|
||
// set ritenuta lorda
|
||
if ((pos = token_pos("RITLORDA")) != -1)
|
||
s.ritlorda = t.get(pos);
|
||
|
||
// set contributi obbligatori
|
||
if ((pos = token_pos("CONTROBB")) != -1)
|
||
s.controbb = t.get(pos);
|
||
|
||
// set detrazioni famigliari
|
||
if ((pos = token_pos("DETFAMIL")) != -1)
|
||
s.detfamil = t.get(pos);
|
||
|
||
// set detrazioni lavoro dipendente
|
||
if ((pos = token_pos("DETLAVDIP")) != -1)
|
||
s.detlavdip = t.get(pos);
|
||
|
||
// set totale detrazioni
|
||
if ((pos = token_pos("TOTDET")) != -1)
|
||
s.totdet = t.get(pos);
|
||
|
||
// set giorni lavoro dipendente
|
||
if ((pos = token_pos("GIOLAVDIP")) != -1)
|
||
s.giolavdip = t.get_int(pos);
|
||
|
||
// set importo CPA
|
||
if ((pos = token_pos("IMPCPA")) != -1)
|
||
s.impcpa = t.get(pos);
|
||
|
||
// set somme regime convenzionale
|
||
if ((pos = token_pos("SOMREGCONV")) != -1)
|
||
s.somregconv = t.get(pos);
|
||
|
||
// set percentuale contributo 10%
|
||
if ((pos = token_pos("ALQIMP10")) != -1)
|
||
s.alqimp10 = t.get(pos);
|
||
|
||
// set codice contributo 10%
|
||
if ((pos = token_pos("COD10")) != -1)
|
||
s.cod10 = t.get(pos);
|
||
|
||
// set utili pagati
|
||
if ((pos = token_pos("UTPAGATI")) != -1)
|
||
s.utpagati = t.get(pos);
|
||
|
||
// set utili spettanti
|
||
if ((pos = token_pos("UTSPETT")) != -1)
|
||
s.utspett = t.get(pos);
|
||
|
||
// set ritenuta utili pagati
|
||
if ((pos = token_pos("RITUTPAG")) != -1)
|
||
s.ritutpag = t.get(pos);
|
||
|
||
// set ritenuta utili spettanti
|
||
if ((pos = token_pos("RITUTSPE")) != -1)
|
||
s.ritutspe = t.get(pos);
|
||
|
||
// set numero quote
|
||
if ((pos = token_pos("NQUOTE")) != -1)
|
||
s.nquote = t.get(pos);
|
||
|
||
// set somme non sogg.ritenuta
|
||
if ((pos = token_pos("SOMNSRIT")) != -1)
|
||
s.somnsrit = t.get(pos);
|
||
|
||
// set ammontare lordo
|
||
if ((pos = token_pos("AMMLORDO")) != -1)
|
||
s.ammlordo = t.get(pos);
|
||
|
||
// set quota provvigioni
|
||
if ((pos = token_pos("QUOTAPROV")) != -1)
|
||
s.quotaprov = t.get(pos);
|
||
|
||
// set imponibile al netto ritenute
|
||
if ((pos = token_pos("IMPNETTO")) != -1)
|
||
s.impnetto = t.get(pos);
|
||
|
||
// set compenso al netto ritenute
|
||
if ((pos = token_pos("COMNETTO")) != -1)
|
||
s.comnetto = t.get(pos);
|
||
|
||
// set numero versamento collegato
|
||
if ((pos = token_pos("NUMVERS")) != -1)
|
||
s.numvers = t.get_long(pos);
|
||
|
||
// set numero registrazione
|
||
if ((pos = token_pos(PAG_NUMREG)) != -1)
|
||
s.numreg = t.get_long(pos);
|
||
|
||
return s;
|
||
}
|
||
|
||
void TSchedaPercipienti::from_struct_to_sheet(const Pag_struct& s, TToken_string& t)
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// posizione dell'informazione all'interno della Token_string
|
||
int pos;
|
||
|
||
// set data pagamento
|
||
if ((pos = token_pos("DATAPAG")) != -1)
|
||
t.add(s.datapag, pos);
|
||
|
||
// set imponibile
|
||
if ((pos = token_pos("IMPONIBILE")) != -1)
|
||
t.add(s.imponibile.string(), pos);
|
||
|
||
// set percentuale ritenuta
|
||
if ((pos = token_pos("PERC")) != -1)
|
||
t.add(s.perc.string(), pos);
|
||
|
||
// set ritenuta
|
||
if ((pos = token_pos("RITENUTA")) != -1)
|
||
t.add(s.ritenuta.string(), pos);
|
||
|
||
// set compenso
|
||
if ((pos = token_pos("COMPENSO")) != -1)
|
||
t.add(s.compenso.string(), pos);
|
||
|
||
// set compenso netto
|
||
if ((pos = token_pos("NETTO")) != -1)
|
||
t.add(s.netto.string(), pos);
|
||
|
||
// set numero versamento collegato
|
||
if ((pos = token_pos("NUMVERS")) != -1)
|
||
t.add(s.numvers, pos);
|
||
|
||
// set spesa
|
||
if ((pos = token_pos("SPESA")) != -1)
|
||
t.add(s.spesa.string(), pos);
|
||
|
||
// set contr.10% percipiente
|
||
if ((pos = token_pos("CTSSNPERC")) != -1)
|
||
t.add(s.ctssnperc.string(), pos);
|
||
|
||
// set contr.10% complessivo
|
||
if ((pos = token_pos("CTSSNCOMP")) != -1)
|
||
t.add(s.ctssncomp.string(), pos);
|
||
|
||
// set ritenuta lorda
|
||
if ((pos = token_pos("RITLORDA")) != -1)
|
||
t.add(s.ritlorda.string(), pos);
|
||
|
||
// set contributi obbligatori
|
||
if ((pos = token_pos("CONTROBB")) != -1)
|
||
t.add(s.controbb.string(), pos);
|
||
|
||
// set detrazioni famigliari
|
||
if ((pos = token_pos("DETFAMIL")) != -1)
|
||
t.add(s.detfamil.string(), pos);
|
||
|
||
// set detrazioni lavoro dipendente
|
||
if ((pos = token_pos("DETLAVDIP")) != -1)
|
||
t.add(s.detlavdip.string(), pos);
|
||
|
||
// set totale detrazioni
|
||
if ((pos = token_pos("TOTDET")) != -1)
|
||
t.add(s.totdet.string(), pos);
|
||
|
||
// set giorni lavoro dipendente
|
||
if ((pos = token_pos("GIOLAVDIP")) != -1)
|
||
t.add(s.giolavdip, pos);
|
||
|
||
// set importo CPA
|
||
if ((pos = token_pos("IMPCPA")) != -1)
|
||
t.add(s.impcpa.string(), pos);
|
||
|
||
// set somme regime convenzionale
|
||
if ((pos = token_pos("SOMREGCONV")) != -1)
|
||
t.add(s.somregconv.string(), pos);
|
||
|
||
// set percentuale contributo 10%
|
||
if ((pos = token_pos("ALQIMP10")) != -1)
|
||
t.add(s.alqimp10.string(), pos);
|
||
|
||
// set codice contributo 10%
|
||
if ((pos = token_pos("COD10")) != -1)
|
||
t.add(s.cod10, pos);
|
||
|
||
// set utili pagati
|
||
if ((pos = token_pos("UTPAGATI")) != -1)
|
||
t.add(s.utpagati.string(), pos);
|
||
|
||
// set utili spettanti
|
||
if ((pos = token_pos("UTSPETT")) != -1)
|
||
t.add(s.utspett.string(), pos);
|
||
|
||
// set ritenuta utili pagati
|
||
if ((pos = token_pos("RITUTPAG")) != -1)
|
||
t.add(s.ritutpag.string(), pos);
|
||
|
||
// set ritenuta utili spettanti
|
||
if ((pos = token_pos("RITUTSPE")) != -1)
|
||
t.add(s.ritutspe.string(), pos);
|
||
|
||
// set numero quote
|
||
if ((pos = token_pos("NQUOTE")) != -1)
|
||
t.add(s.nquote.string(), pos);
|
||
|
||
// set somme non sogg.ritenuta
|
||
if ((pos = token_pos("SOMNSRIT")) != -1)
|
||
t.add(s.somnsrit.string(), pos);
|
||
|
||
// set ammontare lordo
|
||
if ((pos = token_pos("AMMLORDO")) != -1)
|
||
t.add(s.ammlordo.string(), pos);
|
||
|
||
// set quota provvigioni
|
||
if ((pos = token_pos("QUOTAPROV")) != -1)
|
||
t.add(s.quotaprov.string(), pos);
|
||
|
||
// set imponibile al netto ritenute
|
||
if ((pos = token_pos("IMPNETTO")) != -1)
|
||
t.add(s.impnetto.string(), pos);
|
||
|
||
// set compenso al netto ritenute
|
||
if ((pos = token_pos("COMNETTO")) != -1)
|
||
t.add(s.comnetto.string(), pos);
|
||
|
||
// set numero versamento collegato
|
||
if ((pos = token_pos("NUMVERS")) != -1)
|
||
t.add(s.numvers, pos);
|
||
|
||
// set numero registrazione
|
||
if ((pos = token_pos(PAG_NUMREG)) != -1)
|
||
t.add(s.numreg, pos);
|
||
}
|
||
|
||
Pag_struct& TSchedaPercipienti::from_mask_to_struct(TMask& m, Pag_struct& s)
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// azzero struttura
|
||
clear_struct(s);
|
||
|
||
// identificatore del token all'interno della maschera
|
||
int dlg;
|
||
|
||
// set data pagamento
|
||
if ((dlg = token_dlg("DATAPAG")) != -1)
|
||
s.datapag = m.get_date(dlg);
|
||
|
||
// set imponibile
|
||
if ((dlg = token_dlg("IMPONIBILE")) != -1)
|
||
s.imponibile = m.get_real(dlg);
|
||
|
||
// set percentuale ritenuta
|
||
if ((dlg = token_dlg("PERC")) != -1)
|
||
s.perc = m.get_real(dlg);
|
||
|
||
// set ritenuta
|
||
if ((dlg = token_dlg("RITENUTA")) != -1)
|
||
s.ritenuta = m.get_real(dlg);
|
||
|
||
// set compenso
|
||
if ((dlg = token_dlg("COMPENSO")) != -1)
|
||
s.compenso = m.get_real(dlg);
|
||
|
||
// set compenso netto
|
||
if ((dlg = token_dlg("NETTO")) != -1)
|
||
s.netto = m.get_real(dlg);
|
||
|
||
// set spesa
|
||
if ((dlg = token_dlg("SPESA")) != -1)
|
||
s.spesa = m.get_real(dlg);
|
||
|
||
// set contr.10% percipiente
|
||
if ((dlg = token_dlg("CTSSNPERC")) != -1)
|
||
s.ctssnperc = m.get_real(dlg);
|
||
|
||
// set contr.10% complessivo
|
||
if ((dlg = token_dlg("CTSSNCOMP")) != -1)
|
||
s.ctssncomp = m.get_real(dlg);
|
||
|
||
// set ritenuta lorda
|
||
if ((dlg = token_dlg("RITLORDA")) != -1)
|
||
s.ritlorda = m.get_real(dlg);
|
||
|
||
// set contributi obbligatori
|
||
if ((dlg = token_dlg("CONTROBB")) != -1)
|
||
s.controbb = m.get_real(dlg);
|
||
|
||
// set detrazioni famigliari
|
||
if ((dlg = token_dlg("DETFAMIL")) != -1)
|
||
s.detfamil = m.get_real(dlg);
|
||
|
||
// set detrazioni lavoro dipendente
|
||
if ((dlg = token_dlg("DETLAVDIP")) != -1)
|
||
s.detlavdip = m.get_real(dlg);
|
||
|
||
// set totale detrazioni
|
||
if ((dlg = token_dlg("TOTDET")) != -1)
|
||
s.totdet = m.get_real(dlg);
|
||
|
||
// set giorni lavoro dipendente
|
||
if ((dlg = token_dlg("GIOLAVDIP")) != -1)
|
||
s.giolavdip = m.get_int(dlg);
|
||
|
||
// set importo CPA
|
||
if ((dlg = token_dlg("IMPCPA")) != -1)
|
||
s.impcpa = m.get_real(dlg);
|
||
|
||
// set somme regime convenzionale
|
||
if ((dlg = token_dlg("SOMREGCONV")) != -1)
|
||
s.somregconv = m.get_real(dlg);
|
||
|
||
// set percentuale contributo 10%
|
||
if ((dlg = token_dlg("ALQIMP10")) != -1)
|
||
s.alqimp10 = m.get_real(dlg);
|
||
|
||
// set codice contributo 10%
|
||
if ((dlg = token_dlg("COD10")) != -1)
|
||
s.cod10 = m.get(dlg);
|
||
|
||
// set utili pagati
|
||
if ((dlg = token_dlg("UTPAGATI")) != -1)
|
||
s.utpagati = m.get_real(dlg);
|
||
|
||
// set utili spettanti
|
||
if ((dlg = token_dlg("UTSPETT")) != -1)
|
||
s.utspett = m.get_real(dlg);
|
||
|
||
// set ritenuta utili pagati
|
||
if ((dlg = token_dlg("RITUTPAG")) != -1)
|
||
s.ritutpag = m.get_real(dlg);
|
||
|
||
// set ritenuta utili spettanti
|
||
if ((dlg = token_dlg("RITUTSPE")) != -1)
|
||
s.ritutspe = m.get_real(dlg);
|
||
|
||
// set numero quote
|
||
if ((dlg = token_dlg("NQUOTE")) != -1)
|
||
s.nquote = m.get_real(dlg);
|
||
|
||
// set somme non sogg.ritenuta
|
||
if ((dlg = token_dlg("SOMNSRIT")) != -1)
|
||
s.somnsrit = m.get_real(dlg);
|
||
|
||
// set ammontare lordo
|
||
if ((dlg = token_dlg("AMMLORDO")) != -1)
|
||
s.ammlordo = m.get_real(dlg);
|
||
|
||
// set quota provvigioni
|
||
if ((dlg = token_dlg("QUOTAPROV")) != -1)
|
||
s.quotaprov = m.get_real(dlg);
|
||
|
||
// set imponibile al netto ritenute
|
||
if ((dlg = token_dlg("IMPNETTO")) != -1)
|
||
s.impnetto = m.get_real(dlg);
|
||
|
||
// set compenso al netto ritenute
|
||
if ((dlg = token_dlg("COMNETTO")) != -1)
|
||
s.comnetto = m.get_real(dlg);
|
||
|
||
// set numero versamento collegato
|
||
if ((dlg = token_dlg("NUMVERS")) != -1)
|
||
s.numvers = m.get_long(dlg);
|
||
|
||
return s;
|
||
}
|
||
|
||
void TSchedaPercipienti::from_struct_to_mask(Pag_struct& s, TMask& m)
|
||
{
|
||
// reperisco la Token_string pilota
|
||
TToken_string columns(pilot_sheet());
|
||
|
||
// identificatore del token all'interno della maschera
|
||
int dlg;
|
||
|
||
// set data pagamento
|
||
if ((dlg = token_dlg("DATAPAG")) != -1)
|
||
m.set(dlg, s.datapag);
|
||
|
||
// set imponibile
|
||
if ((dlg = token_dlg("IMPONIBILE")) != -1)
|
||
m.set(dlg, s.imponibile);
|
||
|
||
// set percentuale ritenuta
|
||
if ((dlg = token_dlg("PERC")) != -1)
|
||
m.set(dlg, s.perc);
|
||
|
||
// set ritenuta
|
||
if ((dlg = token_dlg("RITENUTA")) != -1)
|
||
m.set(dlg, s.ritenuta);
|
||
|
||
// set compenso
|
||
if ((dlg = token_dlg("COMPENSO")) != -1)
|
||
m.set(dlg, s.compenso);
|
||
|
||
// set compenso netto
|
||
if ((dlg = token_dlg("NETTO")) != -1)
|
||
m.set(dlg, s.netto);
|
||
|
||
// set spesa
|
||
if ((dlg = token_dlg("SPESA")) != -1)
|
||
m.set(dlg, s.spesa);
|
||
|
||
// set contr.10% percipiente
|
||
if ((dlg = token_dlg("CTSSNPERC")) != -1)
|
||
m.set(dlg, s.ctssnperc);
|
||
|
||
// set contr.10% complessivo
|
||
if ((dlg = token_dlg("CTSSNCOMP")) != -1)
|
||
m.set(dlg, s.ctssncomp);
|
||
|
||
// set ritenuta lorda
|
||
if ((dlg = token_dlg("RITLORDA")) != -1)
|
||
m.set(dlg, s.ritlorda);
|
||
|
||
// set contributi obbligatori
|
||
if ((dlg = token_dlg("CONTROBB")) != -1)
|
||
m.set(dlg, s.controbb);
|
||
|
||
// set detrazioni famigliari
|
||
if ((dlg = token_dlg("DETFAMIL")) != -1)
|
||
m.set(dlg, s.detfamil);
|
||
|
||
// set detrazioni lavoro dipendente
|
||
if ((dlg = token_dlg("DETLAVDIP")) != -1)
|
||
m.set(dlg, s.detlavdip);
|
||
|
||
// set totale detrazioni
|
||
if ((dlg = token_dlg("TOTDET")) != -1)
|
||
m.set(dlg, s.totdet);
|
||
|
||
// set giorni lavoro dipendente
|
||
if ((dlg = token_dlg("GIOLAVDIP")) != -1)
|
||
m.set(dlg, s.giolavdip);
|
||
|
||
// set importo CPA
|
||
if ((dlg = token_dlg("IMPCPA")) != -1)
|
||
m.set(dlg, s.impcpa);
|
||
|
||
// set somme regime convenzionale
|
||
if ((dlg = token_dlg("SOMREGCONV")) != -1)
|
||
m.set(dlg, s.somregconv);
|
||
|
||
// set percentuale contributo 10%
|
||
if ((dlg = token_dlg("ALQIMP10")) != -1)
|
||
m.set(dlg, s.alqimp10);
|
||
|
||
// set codice contributo 10%
|
||
if ((dlg = token_dlg("COD10")) != -1)
|
||
m.set(dlg, s.cod10);
|
||
|
||
// set utili pagati
|
||
if ((dlg = token_dlg("UTPAGATI")) != -1)
|
||
m.set(dlg, s.utpagati);
|
||
|
||
// set utili spettanti
|
||
if ((dlg = token_dlg("UTSPETT")) != -1)
|
||
m.set(dlg, s.utspett);
|
||
|
||
// set ritenuta utili pagati
|
||
if ((dlg = token_dlg("RITUTPAG")) != -1)
|
||
m.set(dlg, s.ritutpag);
|
||
|
||
// set ritenuta utili spettanti
|
||
if ((dlg = token_dlg("RITUTSPE")) != -1)
|
||
m.set(dlg, s.ritutspe);
|
||
|
||
// set numero quote
|
||
if ((dlg = token_dlg("NQUOTE")) != -1)
|
||
m.set(dlg, s.nquote);
|
||
|
||
// set somme non sogg.ritenuta
|
||
if ((dlg = token_dlg("SOMNSRIT")) != -1)
|
||
m.set(dlg, s.somnsrit);
|
||
|
||
// set ammontare lordo
|
||
if ((dlg = token_dlg("AMMLORDO")) != -1)
|
||
m.set(dlg, s.ammlordo);
|
||
|
||
// set quota provvigioni
|
||
if ((dlg = token_dlg("QUOTAPROV")) != -1)
|
||
m.set(dlg, s.quotaprov);
|
||
|
||
// set imponibile al netto ritenute
|
||
if ((dlg = token_dlg("IMPNETTO")) != -1)
|
||
m.set(dlg, s.impnetto);
|
||
|
||
// set compenso al netto ritenute
|
||
if ((dlg = token_dlg("COMNETTO")) != -1)
|
||
m.set(dlg, s.comnetto);
|
||
|
||
// set numero versamento collegato
|
||
if ((dlg = token_dlg("NUMVERS")) != -1)
|
||
m.set(dlg, s.numvers);
|
||
}
|
||
|
||
Pag_struct& TSchedaPercipienti::clear_struct(Pag_struct& s)
|
||
{
|
||
s.datapag = NULLDATE;
|
||
s.imponibile = ZERO;
|
||
s.perc = ZERO;
|
||
s.ritenuta = ZERO;
|
||
s.compenso = ZERO;
|
||
s.netto = ZERO;
|
||
s.numvers = -1L;
|
||
s.spesa = ZERO;
|
||
s.ctssnperc = ZERO;
|
||
s.ctssncomp = ZERO;
|
||
s.ritlorda = ZERO;
|
||
s.controbb = ZERO;
|
||
s.detfamil = ZERO;
|
||
s.detlavdip = ZERO;
|
||
s.totdet = ZERO;
|
||
s.giolavdip = 0;
|
||
s.impcpa = ZERO;
|
||
s.somregconv = ZERO;
|
||
s.alqimp10 = ZERO;
|
||
s.cod10 = "";
|
||
s.utpagati = ZERO;
|
||
s.utspett = ZERO;
|
||
s.ritutpag = ZERO;
|
||
s.ritutspe = ZERO;
|
||
s.nquote = ZERO;
|
||
s.somnsrit = ZERO;
|
||
s.ammlordo = ZERO;
|
||
s.quotaprov = ZERO;
|
||
s.impnetto = ZERO;
|
||
s.comnetto = ZERO;
|
||
s.numreg = 0L;
|
||
|
||
return s;
|
||
}
|
||
|
||
Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
|
||
Pag_struct& c,
|
||
bool force,
|
||
const real h_PercAssImp,
|
||
const real h_PercCassaPrev,
|
||
const real h_PercRitenuta,
|
||
const real h_PercInps,
|
||
const real h_PercAssImpInps,
|
||
const real h_PercCommitInps)
|
||
{
|
||
const int fdec = TCurrency::get_firm_dec();
|
||
|
||
// azzera struttura di valori calcolati
|
||
clear_struct(c);
|
||
|
||
// calcolo CPA
|
||
c.impcpa = s.compenso * h_PercCassaPrev / (CENTO + h_PercCassaPrev);
|
||
c.impcpa.round(fdec);
|
||
if (s.impcpa == ZERO || force)
|
||
s.impcpa = c.impcpa;
|
||
|
||
// calcolo imponibile
|
||
c.imponibile = (s.compenso - s.impcpa) * h_PercAssImp / CENTO;
|
||
c.imponibile.round(fdec);
|
||
if (s.imponibile == ZERO || force)
|
||
s.imponibile = c.imponibile;
|
||
|
||
// percentuale ritenuta acconto
|
||
if (s.perc == ZERO || force)
|
||
s.perc = h_PercRitenuta;
|
||
|
||
// calcolo ritenuta lorda
|
||
c.ritlorda = s.imponibile * s.perc / CENTO;
|
||
c.ritlorda.round(fdec);
|
||
s.ritlorda = c.ritlorda;
|
||
|
||
// calcolo totale detrazioni
|
||
c.totdet = s.detfamil + s.detlavdip;
|
||
if (abs(c.totdet) > abs(s.ritlorda))
|
||
c.totdet = s.ritlorda;
|
||
s.totdet = c.totdet;
|
||
|
||
// calcolo ritenuta
|
||
c.ritenuta = s.ritlorda - s.totdet;
|
||
if (s.ritenuta == ZERO || force)
|
||
s.ritenuta = c.ritenuta;
|
||
|
||
// percentuale assoggettamento Inps
|
||
if (s.alqimp10 == ZERO || force)
|
||
s.alqimp10 = h_PercAssImpInps;
|
||
|
||
// calcolo contributo Inps complessivo
|
||
c.ctssncomp = ((s.compenso * s.alqimp10 / CENTO) * h_PercInps) / CENTO;
|
||
c.ctssncomp.round(fdec);
|
||
if (s.ctssncomp == ZERO || force)
|
||
s.ctssncomp = c.ctssncomp;
|
||
|
||
// calcolo contributo Inps del percipiente
|
||
if (h_PercCommitInps <= ZERO)
|
||
c.ctssnperc = s.ctssncomp - (s.ctssncomp * 2.0 / 3.0);
|
||
else
|
||
c.ctssnperc = s.ctssncomp - (s.ctssncomp * h_PercCommitInps / CENTO);
|
||
c.ctssnperc.round(fdec);
|
||
if (s.ctssnperc == ZERO || force)
|
||
s.ctssnperc = c.ctssnperc;
|
||
|
||
// calcolo utili pagati
|
||
if (abs(s.utpagati) > abs(s.imponibile))
|
||
s.utpagati = s.imponibile;
|
||
|
||
// calcolo ritenute utili pagati
|
||
c.ritutpag = s.utpagati * s.perc / CENTO;
|
||
c.ritutpag.round(fdec);
|
||
if (s.ritutpag == ZERO || force)
|
||
s.ritutpag = c.ritutpag;
|
||
if (abs(s.ritutpag) > abs(s.ritenuta))
|
||
s.ritutpag = s.ritenuta;
|
||
|
||
// calcolo utili spettanti
|
||
s.utspett = s.imponibile - s.utpagati;
|
||
|
||
// calcolo ritenute utili spettanti
|
||
s.ritutspe = s.ritenuta - s.ritutpag;
|
||
|
||
// calcolo compenso netto
|
||
s.netto = s.compenso + s.spesa - s.ritenuta - s.ctssnperc;
|
||
|
||
// calcolo somme non soggette a ritenuta
|
||
s.somnsrit = s.compenso - s.imponibile + s.spesa - s.impcpa - s.somregconv;
|
||
|
||
// calcolo ammontare lordo
|
||
s.ammlordo = s.imponibile + s.somnsrit + s.controbb + s.somregconv;
|
||
|
||
// calcolo quota provvigioni
|
||
s.quotaprov = s.somnsrit - s.spesa;
|
||
|
||
// calcolo imponibile al netto delle ritenute
|
||
s.impnetto = s.imponibile - s.ritenuta;
|
||
|
||
// calcolo compenso al netto delle ritenute
|
||
s.comnetto = s.compenso - s.ritenuta;
|
||
|
||
return s;
|
||
}
|
||
|
||
TSheet_field& TSchedaPercipienti::enable_pag_sheet(TMask& m, const TString& quadro) const
|
||
{
|
||
TSheet_field* s = NULL;
|
||
|
||
TSheet_field& s_C = (TSheet_field&)m.field(F_PAGAMENTI_C);
|
||
if (quadro == "SC" || quadro == "SE")
|
||
{
|
||
s_C.show();
|
||
s = &s_C;
|
||
}
|
||
else s_C.hide();
|
||
|
||
TSheet_field& s_F = (TSheet_field&)m.field(F_PAGAMENTI_D);
|
||
if (quadro == "SF" || quadro == "SG")
|
||
{
|
||
s_F.show();
|
||
s = &s_F;
|
||
}
|
||
else s_F.hide();
|
||
|
||
// abilito sheet di default nel caso il quadro non fosse uno dei previsti
|
||
if (s == NULL)
|
||
{
|
||
s_C.show();
|
||
s = &s_C;
|
||
}
|
||
|
||
return *s;
|
||
}
|
||
|
||
void TSchedaPercipienti::set_pag_handler(TSheet_field& s) const
|
||
{
|
||
// aggancio handler notify dei pagamenti
|
||
s.set_notify(pags_notify);
|
||
|
||
// aggancio handler data pagamento
|
||
int dlg = token_dlg("DATAPAG");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler imponibile
|
||
dlg = token_dlg("IMPONIBILE");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler percentuale ritenuta
|
||
dlg = token_dlg("PERC");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler ritenuta
|
||
dlg = token_dlg("RITENUTA");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler compensi
|
||
dlg = token_dlg("COMPENSO");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler spesa
|
||
dlg = token_dlg("SPESA");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler contributo Inps percipiente
|
||
dlg = token_dlg("CTSSNPERC");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler contributo Inps complessivo
|
||
dlg = token_dlg("CTSSNCOMP");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler contributi obbligatori
|
||
dlg = token_dlg("CONTROBB");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler detrazioni familiari a carico
|
||
dlg = token_dlg("DETFAMIL");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler contributo Inps complessivo
|
||
dlg = token_dlg("DETLAVDIP");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler CPA
|
||
dlg = token_dlg("IMPCPA");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler contributo Inps complessivo
|
||
dlg = token_dlg("SOMREGCONV");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler percentuale assogg.imponibile Inps
|
||
dlg = token_dlg("ALQIMP10");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler utili pagati
|
||
dlg = token_dlg("UTPAGATI");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler ritenute utili pagati
|
||
dlg = token_dlg("RITUTPAG");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
// aggancio handler numero quote
|
||
dlg = token_dlg("NQUOTE");
|
||
if (dlg != -1) s.sheet_mask().set_handler(dlg, pag_standard_handler);
|
||
|
||
// aggancio handler button azzera
|
||
s.sheet_mask().set_handler(DLG_AZZERAPAG, pag_azzera);
|
||
}
|
||
|
||
void TSchedaPercipienti::build_causqua_items(TMask& m, const TString& quadro) const
|
||
{
|
||
// reference al campo causale quadro
|
||
TEdit_field& f_causqua = m.efield(F_CAUSQUA);
|
||
// refernce allo sheet del campo causale quadro
|
||
TString_array& Items = f_causqua.sheet()->rows_array();
|
||
// rimuovo tutti gli items
|
||
Items.destroy();
|
||
// genero i nuovi items
|
||
if (quadro == "SC")
|
||
for (int i=0; ITEMS_SC[i]; i++)
|
||
Items.add(ITEMS_SC[i]);
|
||
if (quadro == "SE")
|
||
for (int i=0; ITEMS_SE[i]; i++)
|
||
Items.add(ITEMS_SE[i]);
|
||
if (quadro == "SF")
|
||
for (int i=0; ITEMS_SF[i]; i++)
|
||
Items.add(ITEMS_SF[i]);
|
||
if (quadro == "SG")
|
||
for (int i=0; ITEMS_SG[i]; i++)
|
||
Items.add(ITEMS_SG[i]);
|
||
if (quadro == "LA")
|
||
for (int i=0; ITEMS_LA[i]; i++)
|
||
Items.add(ITEMS_LA[i]);
|
||
}
|
||
|
||
int SchedaPerc (int argc, char* argv[])
|
||
{
|
||
TSchedaPercipienti a;
|
||
a.run(argc, argv, TR("Scheda Percipienti"));
|
||
return 0;
|
||
}
|