From fe0ff9aaaaa02f0ec66cb17259fc8e74a185c395 Mon Sep 17 00:00:00 2001 From: luciano Date: Thu, 27 Feb 1997 15:44:56 +0000 Subject: [PATCH] Correzioni varie, per avere maggiori informazioni guardarsi il file crono.doc git-svn-id: svn://10.65.10.50/trunk@4166 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/770100.cpp | 17 +- m770/770102.cpp | 2506 +++++++++++++++++++++++----------------------- m770/771100c.uml | 5 +- m770/771200b.uml | 1953 ++++++++++++++++++------------------ m770/771200d.uml | 599 +++++------ m770/771200f.uml | 819 +++++++-------- m770/771230b.uml | 31 +- m770/771290a.uml | 11 +- m770/771310.cpp | 950 +++++++++--------- m770/774100.cpp | 1068 ++++++++++---------- m770/774100.h | 110 +- m770/776300.cpp | 17 +- m770/776500.cpp | 166 ++- m770/776500a.uml | 2 - m770/77_g_p2.uml | 4 +- m770/77_g_p3.uml | 4 +- m770/77base3.frm | 9 +- m770/77g1a.h | 3 +- m770/77g1pa.uml | 4 +- m770/77qn.uml | 2 +- m770/77qp.uml | 2 +- m770/77qq.uml | 2 +- m770/77qr.uml | 2 +- m770/77qs.uml | 2 +- m770/77qt.uml | 2 +- 25 files changed, 4153 insertions(+), 4137 deletions(-) diff --git a/m770/770100.cpp b/m770/770100.cpp index ecc856302..7a842adff 100755 --- a/m770/770100.cpp +++ b/m770/770100.cpp @@ -900,19 +900,18 @@ void TSchedaPercipienti::mask2rel(const TMask& m) TString16 serie(row.get(4)); TString numero(row.get(5)); - const long ProgBanca = row.get_long(6); + const long ProgBanca(row.get_long(6)); 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("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", (long)ProgBanca); - r.put("RITENUTA", ritenuta); + r.put("PROGBANC",ProgBanca); + r.put("RITENUTA",ritenuta); // r.put("NUMVERS", (long)nriga); // r.put("NUMVERS", (long)numvers); } diff --git a/m770/770102.cpp b/m770/770102.cpp index a8c649f23..c4a83d3f8 100755 --- a/m770/770102.cpp +++ b/m770/770102.cpp @@ -1,1249 +1,1257 @@ -#include "770100a.h" -#include "770101.h" -#include "770102.h" -#include -// -// Lista modifiche -// -// 27.5.96 work_tipoluogo() disabilita il campo PROGRBANCA e lo abilita -// solo se e' un versamento in banca -// -// 5.6.96 Calcolo contributo INPS -// 22.7.96 Esegue controllo ritenuta solo se diversa da ZERO -// Tolti tutti i trunc() per lasciare i decimali nei conti -// 24.7.96 Non considera piu' la perc. come 100 se lasciata vuota -// - -HIDDEN TString80 tmp1, tmp2; -HIDDEN real __impo = ZERO; -HIDDEN real __compe = ZERO; -HIDDEN real __percra = ZERO; -HIDDEN TString80 __rite; -HIDDEN bool __bRicalcolaRigaPag = FALSE; -HIDDEN real __rCompensoCg = ZERO; -void CalcolaInps(const real& rPercCassaPrev,const real& rCompenso, const real &rPercContrInps, - const real& rPercAssContrInps,const real &rQuotaCommitContrInps, - real& rInpsPerc,real &rInpsComplex); - -void TSchedaPercipienti::init_mask(TMask& m) -{ - update_lasts(m); - __bRicalcolaRigaPag = FALSE; - __rCompensoCg = ZERO; - if (tipo_coll() != nessuno) - { - const bool variazione = coll_variazione(); - if (!variazione) compila_testata(m); - switch (tipo_coll()) - { - case pagamento: - case occasionale: -// Compilo riga di pagamento SOLO SE NON ce ne sono gia'.. - if ( (tipo_coll() == pagamento && _rel->pag_items() == 0) - || - tipo_coll() == occasionale ) - { - const real totrit(m.get(F_TOTRIT)); - const real totdoc(m.get(F_TOTDOC)); - const real compenso(m.get(F_COMPENS)); - const real spese(m.get(F_SPESE)); - - if ((tipo_coll() == pagamento && (_coll._compenso + totrit == totdoc) ) - || - (tipo_coll() == occasionale)) - { - TSheet_field& pags = (TSheet_field&)m.field(F_PAGAMENTI); - TRectype rpag(_rel->pag(0)); - rpag.zero(); - real& imponibile = _coll._compenso; - rpag.put("DATAPAG", _coll._datadoc); - rpag.put("COMPENSO", compenso); - rpag.put("SPESA", spese); -// forza il ricalcolo della riga pag. (da check_causale) - __bRicalcolaRigaPag = TRUE; - __rCompensoCg = compenso; -// Update spreadsheet - rec2row(pags.row(0), rpag, 0); - pags.force_update(); - } - } -// break; - default: -// per evitare di riscrivere tutto dopo registra - _coll._tipo_coll = nessuno; - break; - } - } - fill_sheet(m); -} - -// Utilizzato in collegamento da cg -real TSchedaPercipienti::calcola_ritenuta(const real& imponibile, TString& sPercRa, - real& rPercCassaPrev,real& rPercContrInps,real& rPercAssContrInps, - real& rQuotaCommitContrInps, bool& bContrInps) -{ - TTable cau("%ca7"); - TString codcau(curr_mask().get(F_CODCAUS)); - cau.zero(); - cau.put("CODTAB", codcau); - cau.read(); - real rQuotaRaCaus = cau.get_real("R0"); - sPercRa = cau.get("R0"); - bContrInps=cau.get_bool("B4"); - if (bContrInps) - { - rPercCassaPrev=cau.get_real("R5"); - rPercContrInps=cau.get_real("R1"); - rPercAssContrInps=cau.get_real("R2"); - rQuotaCommitContrInps=cau.get_real("R3"); - } - else - { - rPercCassaPrev=ZERO; - rPercContrInps=ZERO; - rPercAssContrInps=ZERO; - rQuotaCommitContrInps=ZERO; - } - real rite = ZERO; - rite = (imponibile * rQuotaRaCaus)/100.00; - return rite; -} - -// Utilizzato in collegamento da cg Forse ora da togliere.. -real TSchedaPercipienti::calcola_imponibile(const real& compenso) -{ - TTable cau("%ca7"); - TString codcau(curr_mask().get(F_CODCAUS)); - cau.zero(); - cau.put("CODTAB", codcau); - if (cau.read() != NOERR) - return ZERO; - real quota_imp = cau.get_int("R4"); - TString16 cod_qua(cau.get("S1")); - real imponibile_calcolato = ZERO; -// Calcola imponibile - if (compenso != ZERO) - imponibile_calcolato = (compenso * quota_imp) / 100.00; - return imponibile_calcolato; -} - -bool TSchedaPercipienti::vers_notify(TSheet_field& s, int r, KEY k) -{ - switch(k) - { - -// Inserimento riga - case K_INS: -// Impedisce inserimento di nuove righe - return FALSE; - -// Inizio modifica riga - case K_SPACE: - { -// Pulisco descrizioni luogo e tipo versamento (solo se non gia' indicati!) - TSheet_field& vers = app().vers(); - TMask& mp = vers.sheet_mask(); - TString16 tipo(mp.get(F_TIPOVERS)); - TString16 luo (mp.get(F_LUOVERS)); - if (tipo.empty()) - mp.reset(70); - if (luo.empty()) - mp.reset(71); - break; - } - - default: - break; - } - return TRUE; -} - -bool TSchedaPercipienti::pags_notify(TSheet_field& s, int r, KEY k) -{ - switch(k) - { - -// Inserimento riga - case K_INS: -// Impedisce inserimento di nuove righe - return FALSE; - -// Inizio modifica riga - case K_SPACE: - { - app()._azzerato_pag = FALSE; -// Se c'e' competenza => diventa obbligatoria DATAPAG - TSheet_field& pags = app().pags(); - TMask& m = app().curr_mask(); -// Salvo imponibile e compenso precedenti alla modifica. -// v. imponibile_handler e compenso_handler - TToken_string& row = pags.row(r); - __compe = row.get(1); - __impo = row.get(3); - __percra = atof(row.get(4)); - __rite = row.get(7); - if (__percra == 0.0) - __percra = atof(s.mask().get(F_PERRIT)); - const long annoc = m.get_long(F_ANNOCOMP); - const long mesec = m.get_long(F_MESECOMP); -#define F_DATAPAG 101 - TMask& mp = pags.sheet_mask(); - TEdit_field& fld = mp.efield(F_DATAPAG); - - if (annoc != 0L || mesec != 0L) - fld.check_type(CHECK_REQUIRED); - else - fld.check_type(CHECK_NONE); - break; - } - -// Fine modifica di una riga - case K_ENTER: -// Pulisco i buffer di confronto - __impo = ZERO; - __compe = ZERO; - __percra = ZERO; - __rite = ""; - break; - - default: - break; - } - return TRUE; -} - -TSheet_field& TSchedaPercipienti::pags() const -{ - TSheet_field& s = (TSheet_field&)curr_mask().field(F_PAGAMENTI); - return s; -} - -TSheet_field& TSchedaPercipienti::vers() const -{ - TSheet_field& s = (TSheet_field&)curr_mask().field(F_VERSAMENTI); - return s; -} - -bool TSchedaPercipienti::my_empty_items(TToken_string& r, bool vers) -{ - TString rr; - - if (vers) - for (int i=0; i < COLONNE_SIGNIFICATIVE_SPREADSHEET_VERSAMENTI; i++) - { - rr = r.get(i); - rr.trim(); - switch (i) { - case 0: // 1015 - if (rr.not_empty()) - return FALSE; - break; - case 1: - if (rr.not_empty()) - return FALSE; - break; - case 2: // lugo e tipo vers. - case 3: - if (rr.not_empty()) - if (rr != "N") - return FALSE; - break; - case 4: - case 5: - if (rr.not_empty()) - return FALSE; - break; - case 6: - if (rr.not_empty()) { - real rrr(real::ita2eng(rr)); - if (rrr != ZERO) - return FALSE; - } - break; - default: - break; - } - } - else - for (int i=0; i < COLONNE_SIGNIFICATIVE_SPREADSHEET_PAGAMENTI; i++) - { - rr = r.get(i); - rr.trim(); - switch (i) { - case 0: // Data - if (rr.not_empty()) - return FALSE; - break; - case 1: // Compenso - if (rr.not_empty()) { - real rrr(real::ita2eng(rr)); - if (rrr != ZERO) - return FALSE; - } - break; - case 2: // Spese e Imponibile - case 3: - if (rr.not_empty()) { - real rrr(real::ita2eng(rr)); - if (rrr != ZERO) - return FALSE; - } - break; - case 4: // r.a. che faccio ? - break; - case 5: - case 6: - if (rr.not_empty()) { - real rrr(real::ita2eng(rr)); - if (rrr != ZERO) - return FALSE; - } - break; - default: - break; - } - } - return TRUE; -} - -void TSchedaPercipienti::pag_pack() -{ - TString_array& rows = pags().rows_array(); - - const int max = rows.items(); - for (int i = 0; i < max; i++) - { - TToken_string& r = (TToken_string&)rows[i]; - if (my_empty_items(r, FALSE)) // Remove all empty strings - rows.destroy(i, FALSE); - } - - rows.pack(); -// rows.sort(compare_rows); // Pack and sort array -} - -void TSchedaPercipienti::ver_pack() -{ - TString_array& rows = vers().rows_array(); - - const int max = rows.items(); - for (int i = 0; i < max; i++) - { - TToken_string& r = (TToken_string&)rows[i]; - if (my_empty_items(r, TRUE)) // Remove all empty strings - rows.destroy(i, FALSE); - } - rows.pack(); -// rows.sort(compare_rows); // Pack and sort array -} - - -// -// LOAD_PAG_SHEET -// -// Inizializza array sheet dei pagamenti -// -void TSchedaPercipienti::load_pag_sheet(const long numvers) -{ - real comp, spese, imp, ritpag; - int i, iNumRigaAS; - - TSheet_field& pag = pags(); - _pags->destroy(); - - iNumRigaAS = 0; // numero di riga dell'array-sheet. Viene incrementato - // solo quando si trovano pagamenti 'giusti' (cioe' solo - // quando si aggiungono elementi all'array-sheet) - for ( i = 0; i < pag.items(); i++) - { - TToken_string* d = new TToken_string(64); - TToken_string& riga = pag.row(i); - -// Scarto le righe non significative - if (my_empty_items(riga, FALSE)) continue; - - const long nvers = riga.get_long(9); - -// "Se il pagamento e' gia' stato selezionato DA UN ALTRO versamento -// NON si deve vedere! " - if (nvers > 0 && nvers != numvers) - continue; - - const long npag = i; - - const int LARGHEZZA_COL = 15; - d->add(" "); // 0 spazio per la 'X' di selezione - TString dep(riga.get(0)); - d->add(dep); // 1 data pagamento - comp = riga.get(1); - dep = comp.string("."); - dep.right_just(LARGHEZZA_COL); - d->add(dep); // 2 compenso - spese = riga.get(2); - dep = spese.string("."); - dep.right_just(LARGHEZZA_COL); - d->add(dep); // 3 spese - -// NB -// se cambia posizione nriga o ritpag nella tokenstring cambia -// anche in pag_select()! - ritpag = riga.get(SS_POS_RITPAG); - dep = ritpag.string("."); - dep.right_just(LARGHEZZA_COL); - d->add(dep); - - d->add(i, SS_POS_NRIGA); -// Metto nell'array-sheet anche NUMVERS - d->add(nvers, SS_POS_NVER); - - _pags->add(*d); // aggiungo la riga nell'array_sheet -// Setto il bit alla posizione numpag e metto la X - if (nvers == numvers) - { - _selected.set(npag); - _pags->check(iNumRigaAS, TRUE); - } - iNumRigaAS++; // ignoro in questo contatore i pagamenti che NON - // si vedono (se il pagamento e' scartato prima di qui - // non ci passa) - } -} - -void TSchedaPercipienti::attach_pag_vers (int pag, long numvers) -{ - TSheet_field& pag_s = pags(); - TToken_string& riga = pag_s.row(pag); - -// setta NUMVERS nello sheet - riga.destroy(9); - riga.add(numvers, 9); - -// setta NUMVERS nel record - _rel->pag(pag).put("NUMVERS", numvers); -} - -void TSchedaPercipienti::detach_pag_vers (int pag) -{ - TSheet_field& pag_s = pags(); - TToken_string& riga = pag_s.row(pag); - - riga.destroy(9); - riga.add(-1L, 9); - -// setta NUMVERS nel record - _rel->pag(pag).put("NUMVERS", -1L); -} - -// -// VERS_ATTACHED ( numvers ) -// -// Determina se c'e' ALMENO UN pagamento collegato al versamento NUMVERS -// -bool TSchedaPercipienti::vers_attached(const long numvers) -{ - long numv = 0L; - -// Aggiorna lo sheet dei pagamenti per questo versamento - app().load_pag_sheet(numvers); - - for (int j = 0; j < _pags->items(); j++) - { -// Leggo NUMVERS - TToken_string& riga = _pags->row(j); - numv = riga.get_long(SS_POS_NVER); - - if (numv > 0L) - if (numv == numvers) - return TRUE; - } - return FALSE; -} - -// -// CHECK_PAGAMENTI -// Questo serve solo a impedire di uscire senza aver collegato almeno -// un pagamento -// -bool TSchedaPercipienti::check_pagamenti(TMask_field& f, KEY k) -{ - const long numvers = get_numvers(f); - return app().vers_attached(numvers); -} - -void TSchedaPercipienti::setta_ritvers(TMask_field& f, const real& ritenuta) -{ - TString80 rit_str(ritenuta.string()); - f.mask().set(F_RITVERS, rit_str); - f.mask().field(F_RITVERS).set_dirty(); // Forza on_hit() -} - -// Guardo se ho compilato la data OPP. il flag 1015 -// Leggo la maschera o la riga dello ss -bool TSchedaPercipienti::compilato_vers(TMask_field& f) -{ - TString16 datav; - char v1015; - - if (f.mask().is_running()) - { - datav = f.mask().get(F_DATAVERS); - v1015 = f.mask().get(F_VERS_1015)[0]; - } - else - { - TSheet_field& ver = app().vers(); - const int riga_corr = ver.selected(); - TToken_string& riga = ver.row(riga_corr); - v1015 = riga.get(0)[0]; - datav = riga.get(1); - datav.trim(); - } - return datav.not_empty() || v1015 == 'X'; -} - - -// -// GET_NUMVERS -// -// Determina il numero di versamento corrente, prendendolo : -// -// dalla maschera, se e' running SENNO' -// dalla riga corrente dello spreadsheet -// -long TSchedaPercipienti::get_numvers(TMask_field& f) -{ - long numvers = 0L; - -// Prendo il numvers da campo nascosto nella maschera - if (f.mask().is_running()) - numvers = f.mask().get_long(VERF_NUMVERS); - else - { - TSheet_field& ver = app().vers(); - const int riga_corr = ver.selected(); - TToken_string& riga = ver.row(riga_corr); - numvers = riga_corr + 1; -// numvers = riga.get_long(SS_POS_NUMVERS); - } - return numvers; -} - -bool TSchedaPercipienti::pag_azzera (TMask_field& f, KEY k) -{ - if (k == K_SPACE) - app()._azzerato_pag = TRUE; // Messo a FALSE in pag_notify - // Serve per NON far riscrivere la % di ritenuta - return TRUE; -} - -bool TSchedaPercipienti::ver_azzera (TMask_field& f, KEY k) -{ - long numvers = get_numvers(f); - int nriga = 0; - TNikArray_sheet& pags = *app()._pags; - - if (k == K_SPACE) - { - app().load_pag_sheet(numvers); - - for (int j = 0; j < pags.items(); j++) - { - TToken_string& riga = pags.row(j); - long numv = riga.get_long(SS_POS_NVER); - - if (numv > 0L) - if (numv == numvers) - { - nriga = pags.row(j).get_int(SS_POS_NRIGA); - pags.row(j).add(-1L, SS_POS_NVER); - app().detach_pag_vers(nriga); - } - } - } - return TRUE; -} - -// -// PAG_SELECT -// -// Collegamento tra versamenti e pagamenti -// -// Calcolo ritenuta = SUM(ritpag) {dei pagamenti collegati} -// -// Usa: load_pag_sheet() attach_pag_vers() e detach_pag_vers() -// -bool TSchedaPercipienti::pag_select (TMask_field& f, KEY k) -{ - if (k == K_SPACE) - { - if (!app().compilato_vers(f)) - return f.warning_box("Inserire prima la data del versamento"); - - long numvers = get_numvers(f); - long numpag = 0L; - int nriga = 0; -// 13.7.95 Ricalcola la ritenuta, azzerando contenuto precedente - real ritenuta = ZERO; - TBit_array& selected = app()._selected; - - selected.reset(); - -// Costruisce array_sheet dei pagamenti - app().load_pag_sheet(numvers); - - TNikArray_sheet& ASpags = *app()._pags; -/* - const int iPagsASheetItems = ASpags.items(); -// Metto la 'X' per quelli gia' collegati (se e' acceso il bit[NUMPAG]) - for (int j = 0; j < iPagsASheetItems; j++) - ASpags.check(j, selected[j]);*/ - -// seleziona e aggiungi alle gia' selezionate - if (ASpags.run() == K_ENTER) - { - for (int j = 0; j < ASpags.items(); j++) - { - // get effettivo numero riga pag. - nriga = ASpags.row(j).get_int(AS_POS_NRIGA); - - int mesec = -1; - int annoc = -1; // competenza - - if (ASpags.checked(j)) - { -// Scrive nello spread-sheet e nella relazione - app().attach_pag_vers(nriga, numvers); - - // Scrive nell'array_sheet (e' da qui che leggo dopo) - ASpags.row(j).add((long)numvers, AS_POS_NVER); - - TDate datapag(ASpags.row(j).get(1)); - if (mesec < 0) - { - mesec = datapag.month(); - annoc = datapag.year(); - } - else - { - if (mesec != datapag.month() || annoc != datapag.year()) -// TBI inserire un'altra riga di versamento (?) - ; - } - selected.set(numpag); - - real dep(real::ita2eng(ASpags.row(j).get(AS_POS_RITPAG))); - ritenuta += dep; - } - else // pags.checked() - { -// resetta se era stato settato prima - if (selected[numpag]) - { - selected.reset(numpag); - ASpags.row(j).add(-1L, AS_POS_NVER); - app().detach_pag_vers(nriga); - } - } - } - setta_ritvers(f, ritenuta); - } // if k==K_ENTER - } - return TRUE; -} - -#define F_SER_VERS 209 -#define F_ABI_VERS 210 -#define F_NUM_VERS 211 -#define F_CAB_VERS 212 -#define F_QUIETANZA_VERS 213 - -void TSchedaPercipienti::work_tipoluogo(TMask_field& f) -{ - TMask& m = f.mask(); - char tipo = m.get(F_TIPOVERS)[0]; - char luogo = m.get(F_LUOVERS)[0]; - TSheet_field& ss = app().vers(); - const int row = ss.selected(); - - m.hide (-2); // nasconde tutto -// ss.enable_cell(row,4); - - if (tipo == 'B') - { - m.show (-6); // ABI e CAB - m.enable(SM_PROGRBANCA); // abilita progressivo vers.banca - ss.enable_cell(row,6); - } - else - { - m.disable(SM_PROGRBANCA); - ss.disable_cell(row,6); - - if (tipo == 'D') - { - if (luogo == 'T') - { - m.show(-3); // SOLO quietanza - ss.disable_cell(row,4); - } - else - { - m.show(-4); // serie e numero - ss.enable_cell(row,4); - } - } -// else - if (tipo == 'C') - { - m.show (-5); // SOLO numero versamento - ss.disable_cell(row,4); - } - } -} - -bool TSchedaPercipienti::luo_hndl(TMask_field& f, KEY k) -{ - if (k == K_TAB) - work_tipoluogo(f); - - if (k == K_ENTER) - { - work_tipoluogo(f); - TMask& m = f.mask(); - char tipo = m.get(F_TIPOVERS)[0]; - char luogo = m.get(F_LUOVERS)[0]; - -// Se ho indicato il luogo => devo indicare anche il TIPO - if (isalpha(luogo)) - return tipo == ' ' || tipo == '\0' ? - f.warning_box("Indicare il tipo del versamento") : TRUE; - } - return TRUE; - -} - -bool TSchedaPercipienti::abicab_hndl(TMask_field& f, KEY k) -{ - if (f.to_check(k)) - { - TString16 park(f.get()); - TMask& m = f.mask(); - char tipo = m.get(F_TIPOVERS)[0]; - -// ABI/CAB solo se tipo e' B - if (tipo != 'B') - return TRUE; - - for (int i=0; i devo indicare anche il LUOGO - if (isalpha(tipo)) - return luogo == ' ' || luogo == '\0' ? - f.warning_box("Indicare il luogo del versamento") : TRUE; - } - return TRUE; -} - -// -// VERS1015_HANDLER -// -bool TSchedaPercipienti::vers1015_handler(TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - TString16 datas = f.mask().get(F_DATAVERS); - const bool v1015 = f.mask().get_bool(F_VERS_1015); - const bool attaccati = check_pagamenti(f,k); - - if (attaccati) - if (!v1015 && datas.empty()) - return f.warning_box("Manca la data del versamento"); - -// Non considerare versamenti non significativi - if (v1015 || datas.not_empty()) - return attaccati ? TRUE : f.warning_box("Nessun pagamento collegato"); - - const real rite (f.mask().get(F_RITVERS)); -// Pero' se c'e' la ritenuta non lo far passare - if (rite != ZERO) - return f.warning_box("Manca la data oppure il flag di versamento 1015"); - - return TRUE; - } - - if (k == K_SPACE || k == K_F2) - { - TSheet_field& ss = app().vers(); - const bool v1015 = (f.get() == "X"); - const int row = ss.selected(); - int i; - -// Disabilito tutto MA NON ritenuta - if (v1015) - { -// Se son gia' disabilitati non fare nulla - if (ss.cell_disabled(row, 1)) - return TRUE; - - f.mask().reset(102); - f.mask().reset(103); - f.mask().reset(104); - f.mask().reset(105); - f.mask().reset(106); - - f.mask().disable(102); - f.mask().disable(103); - f.mask().disable(104); - f.mask().disable(105); - f.mask().disable(106); - - for (i=1; i<6; i++) - ss.disable_cell(row,i); - } - else - { - f.mask().enable(102); - f.mask().enable(103); - f.mask().enable(104); - f.mask().enable(105); - f.mask().enable(106); - - for (i=1; i<6; i++) - ss.enable_cell(row,i); - } - } - return TRUE; -} - -// -// Quadro C e E1: immissione per le sole persone fisiche -// -bool TSchedaPercipienti::check_causale(TMask_field& f, KEY k) -{ - TMask& m = f.mask(); - - if (k == K_TAB && m.is_running()) -// if (f.to_check(k)) - { - TFixed_string cod_caus(f.get(),3); - - if (cod_caus.empty()) - { - KEY ke = m.last_key(); - if (ke != K_QUIT && ke != K_ESC) - return f.warning_box("Manca la causale"); - } - else - { - TString16 cod_qua (m.get(F_CODQUA)); - char tipo = m.get(F_TIPOA)[0]; - - if (cod_qua == "C" || cod_qua == "E1") - if (tipo == 'G') - return f.warning_box("Con il quadro C o E1 e' possibile l'immissione" - " per le sole persone fisiche"); - if (__bRicalcolaRigaPag) - { - real rInpsComplex, rInpsPerc; - TSheet_field& pags = app().pags(); - TMask& ssMask = pags.sheet_mask(); - real rPercCassaPrev = ZERO; - real rPercContrInps = ZERO; - real rPercAssContrInps = ZERO; - real rQuotaCommitContrInps = ZERO; - bool bContrInps=FALSE; - -// aggiorna la riga ( collegamenti con 6(occas.) e 3(pag.) ) - TString sPercRa(6); - real rImpoCg = app().calcola_imponibile(__rCompensoCg); - real rRiteCg = app().calcola_ritenuta(rImpoCg,sPercRa,rPercCassaPrev, - rPercContrInps,rPercAssContrInps,rQuotaCommitContrInps,bContrInps); - TToken_string& tsRiga = pags.row(0); - tsRiga.add(rImpoCg.string(), 3); - tsRiga.add(sPercRa, 4); - tsRiga.add(rRiteCg.string(), 5); -// Calcola anche contributo INPS - if (bContrInps) - { - real rScorporaComp, rImpInps; - CalcolaInps(rPercCassaPrev,__rCompensoCg,rPercContrInps,rPercAssContrInps, - rQuotaCommitContrInps,rInpsPerc,rInpsComplex); - - TString sInpsComp(rInpsComplex.string()); - TString sInpsPerc(rInpsPerc.string()); - tsRiga.add(sInpsPerc,6); - tsRiga.add(sInpsComp,7); - } -// Calcola il netto - real rSpesa(tsRiga.get(2)); - real rNetto = __rCompensoCg-rRiteCg+rSpesa-rInpsPerc; - tsRiga.add(rNetto.string(),8); - pags.force_update(0); -// Per evitare che i valori vengano azzerati: - __compe = __rCompensoCg; - __impo = rImpoCg; - __percra = atof(sPercRa); - __rite = rRiteCg.string(); - } - } - } - return TRUE; -} - -/////////////////////////////////////////////////////////////////////////// -// -// RIGA PAGAMENTI -// -/////////////////////////////////////////////////////////////////////////// -// -// SPESA_HANDLER -// -// Forza il ricalcolo del netto se cambia la spesa -// -bool TSchedaPercipienti::spesa_handler(TMask_field& f, KEY k) -{ - if (k == K_TAB) - f.mask().send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto - return TRUE; -} - -// CHECK_RITENUTA -// o Controlla se la ritenuta e' corretta (SOLO SE != ZERO 22.7.96) -// o Ricalcola la ritenuta se e' stata vuotata -bool TSchedaPercipienti::check_ritenuta(TMask_field& f, KEY k) -{ - if (k == K_TAB) - { - TString rit(f.get()); - const bool changed_rit = __rite.not_empty() ? __rite != rit : FALSE; - const real imponibile(f.mask().get(MPAG_IMPONIBILE)); - - if (rit.empty()) - calcola_ritenuta(f,imponibile); - else - if (changed_rit) - f.mask().send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto - } - -// Controlla solo se RITENUTA != ZERO - if (k == K_ENTER) - { - TMask& m = f.mask(); - const bool forzatura = app().curr_mask().get_bool(F_FORCED); - real perc_ra = (m.get_real(MPAG_PERCRA) ); - if (perc_ra == ZERO) - perc_ra = 100.00; - const real imponibile (m.get(MPAG_IMPONIBILE)); - real ritenuta (m.get(MPAG_RITPAG)); - - if (ritenuta == ZERO) - return TRUE; - - real rite = ZERO; -// Se non indico la percentuale => considero come 100% - if (perc_ra != ZERO) - rite = (imponibile * perc_ra) / 100.00; - else - rite = imponibile; - - rite.trunc(); - ritenuta.trunc(); - rite.round(0); - ritenuta.round(0); - -#ifdef DBG - TString rites(rite.string()); - TString riten(ritenuta.string()); -#endif - -// Segnala solo se la ritenuta calcolata non e' compresa in quella -// letta piu' o meno 1 - if ( (rite < ritenuta-1) || (rite > ritenuta+1) ) - { -#ifdef DBG - f.warning_box("Ritenuta errata calcolo: %s trovo: %s", (const char*) rites, (const char*) riten); -#else - f.warning_box("Ritenuta errata"); -#endif - return forzatura; - } - } - return TRUE; -} - -// -// CALCOLA_IMPONIBILE -// -// Chiamato dall'handler del COMPENSO -// Calcola l'imponibile SE il compenso e' diverso da ZERO -// e lo setta nella maschera -// -real TSchedaPercipienti::calcola_imponibile(TMask_field& f, const real& compenso, - const bool force) -{ - TMask& mm = app().curr_mask(); - TMask& lm = f.mask(); - real quota_imp = mm.get_real(F_QUOTAIMP); - TString16 cod_qua = mm.get(F_CODQUA); - real imponibile_calcolato = ZERO; - const bool bContributoInps = mm.get_bool(F_FLAG_INPS); - const real imp_prec(lm.get(MPAG_IMPONIBILE)); - -// Ricalcolo sempre. NO! modifica del 4/10/95. Su richiesta di Omero - if (imp_prec != ZERO && !force) - return imp_prec; - -// Calcola imponibile - if (compenso != ZERO) - { - imponibile_calcolato = (compenso * quota_imp) / 100.00; -// 13.6.96 toglie il contributo inps - if (bContributoInps) - { - real rPercCassaPrev=ZERO; - rPercCassaPrev = mm.get_real(F_CASSA_PREV); - imponibile_calcolato = (imponibile_calcolato / (100.00 + rPercCassaPrev)) * 100.00; - } - TString impost(imponibile_calcolato.string()); - lm.set(MPAG_IMPONIBILE, impost); - } - return imponibile_calcolato; -} - -bool TSchedaPercipienti::imponibile_handler(TMask_field& f, KEY k) -{ - if (k == K_TAB) - { - const real imponibile(f.mask().get(MPAG_IMPONIBILE)); - const bool forza_ricalcolo = __impo != imponibile; - if (__impo != imponibile) - __impo = imponibile; - if (forza_ricalcolo) - calcola_ritenuta(f, imponibile, forza_ricalcolo); - } - return TRUE; -} - -void CalcolaInps(const real& rPercCassaPrev,const real& rCompenso, - const real& rPercContrInps,const real &rPercAssContrInps, - const real& rQuotaCommitContrInps, real& rInpsPerc,real& rInpsComplex) -{ - real rScorporaComp, rImpInps; - rScorporaComp = (rCompenso / (100.00 + rPercCassaPrev)) * 100.00; - rImpInps = (rScorporaComp / 100.00) * rPercAssContrInps; - rImpInps.round(0); - rInpsComplex = (rImpInps / 100.00 ) * rPercContrInps; -// Se zero si considera 2/3 - if (rQuotaCommitContrInps == ZERO) - rInpsPerc = rInpsComplex - ((rInpsComplex * 2)/3); - else - rInpsPerc = rInpsComplex - ((rInpsComplex * rQuotaCommitContrInps)/100.00); -} - -// -// Handler del COMPENSO -// -// "Calcola ritenuta quando inserisci il compenso" -// chiama calcola_imponibile se compenso e' cambiato -// -bool TSchedaPercipienti::compenso_handler(TMask_field& f, KEY k) -{ - TMask& mm = app().curr_mask(); // main mask - TMask& lm = f.mask(); // local mask - const bool forzatura = mm.get_bool(F_FORCED); - real compenso (lm.get(MPAG_COMPENSO)); - real imponibile = ZERO; - TString16 cod_qua(mm.get(F_CODQUA)); - const bool bContributoInps = mm.get_bool(F_FLAG_INPS); - bool bCambiatoCompenso = FALSE; - - if (k == K_TAB) - { - if (__compe != ZERO && compenso == ZERO) - app()._azzerato_pag = FALSE; - - if (compenso == ZERO) - return TRUE; - - bCambiatoCompenso = __compe != ZERO ? __compe != compenso : FALSE; - if (__compe != compenso) - __compe = compenso; // per evitare di perdere l'imponibile - - imponibile = calcola_imponibile(f, compenso, bCambiatoCompenso); - -#ifdef DBG - tmp1 = imponibile.string(); - tmp2 = compenso.string(); - if (cod_qua != "E1") - if (imponibile > compenso) - warning_box("Imponibile = %s - Compenso = %s", (const char*)tmp1,(const char*)tmp2 ); -#endif - - calcola_ritenuta(f, imponibile, bCambiatoCompenso); - -// "Solo per il quadro E1 l'imponibile puo' essere maggiore del compenso" - if (cod_qua != "E1") - if (imponibile > compenso) - { - f.warning_box("L'imponibile non puo' essere" - " maggiore del compenso"); - return forzatura; - } - -// Calcolo contributo INPS - if (bContributoInps) - { - real rInpsPercPrima = lm.get_real(MPAG_INPSPERC); - real rInpsCompPrima = lm.get_real(MPAG_INPSCOMP); - real rScorporaComp, rImpInps, rInpsComplex, rInpsPerc; - real rPercCassaPrev = mm.get_real(F_CASSA_PREV); - real rPercContrInps = mm.get_real(F_PERC_INPS); - real rPercAssContrInps = mm.get_real(F_PERC_ASS_INPS); - real rQuotaCommitContrInps = mm.get_real(F_PERC_COMMIT_INPS); - CalcolaInps(rPercCassaPrev,compenso,rPercContrInps,rPercAssContrInps, - rQuotaCommitContrInps,rInpsPerc,rInpsComplex); - - TString sInpsComp(rInpsComplex.string()); - TString sInpsPerc(rInpsPerc.string()); -// Setto i compensi INPS solo se prima erano vuoti - if (rInpsPercPrima == ZERO || bCambiatoCompenso) - lm.set(MPAG_INPSPERC, sInpsPerc); - if (rInpsCompPrima == ZERO || bCambiatoCompenso) - lm.set(MPAG_INPSCOMP, sInpsComp); - } - lm.send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto - } - - if (k == K_ENTER) - { - // "Solo per il quadro E1 l'imponibile puo' essere maggiore del compenso" - if (cod_qua != "E1") - if (imponibile > compenso) - { - f.warning_box("L'imponibile non puo' essere" - " maggiore del compenso"); - return forzatura; - } - } - return TRUE; -} - -// -// CALCOLA_RITENUTA -// -// Calcola la ritenuta in base alla % r.a. indicata ( o, se vuota, a quella -// della causale ) e setta il campo della maschera -// -// --[ NB ]-- -// Ricalcola solo se VUOTA -// -bool TSchedaPercipienti::calcola_ritenuta(TMask_field& f, const real& imponibile, const bool forza, const real percent) -{ - TMask& m=f.mask(); - real rPercRaRiga = m.get_real(MPAG_PERCRA); - real rPercRaCaus = app().curr_mask().get_real(F_PERRIT); - const bool azzerato = app()._azzerato_pag; - const real rit_prec(m.get(MPAG_RITPAG)); - - if (rit_prec != ZERO && !forza) - return FALSE; - - real rPerc = ZERO; -// Uso la percentuale della causale SE NON indicata qui E -// SE NON viene passata come parametro (in percra_handler quando si cambia -// l'aliquota) - if (percent == ZERO) - rPerc = rPercRaRiga != ZERO ? rPercRaRiga : rPercRaCaus; - else - rPerc = percent; -// -// Faccio vedere % R.A. presa dalla causale se non l'ho indicata -// e se non ho premuto Azzera (1.12.95) -// Pero' se uno fa azzera e poi riscrive il compenso deve riapparire... -// -// const bool prendi_ra_da_causale = forza ? TRUE : perc_ra == ZERO && !azzerato; - const bool prendi_ra_da_causale = rPercRaRiga == ZERO && !azzerato; - if (prendi_ra_da_causale) - { - TString quota_rast(rPercRaCaus.string()); - m.set(MPAG_PERCRA, quota_rast); - } - -// Calcolo ritenuta ... - real rite = (imponibile * rPerc) / 100.00; - -// .. riempie il campo corrispondente - TString ritest(rite.string()); - m.set(MPAG_RITPAG, ritest); - m.send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto - return TRUE; -} - -// -// Handler della percentuale di r.a. -// ricalcolo la ritenuta quando cambia -// -bool TSchedaPercipienti::percra_handler(TMask_field& f, KEY k) -{ - if (k == K_TAB) - { - const real compenso (f.mask().get(MPAG_COMPENSO)); - const real imponibile (f.mask().get(MPAG_IMPONIBILE)); - real percra(f.get()); - const bool forza_ricalcolo = __percra != percra; - if (__percra != percra) - __percra = percra; - - if (compenso != ZERO) - { - if (forza_ricalcolo) - calcola_ritenuta (f, imponibile, forza_ricalcolo); - } - } - return TRUE; -} - -bool TSchedaPercipienti::netto_handler(TMask_field& f, KEY k) -{ - if (k == K_TAB) - calcola_netto(f); - return TRUE; -} - -// -// Calcola e setta il NETTO -// -// Il netto e' ricalcolato e settato sempre visto che non e' gestibile -// -real TSchedaPercipienti::calcola_netto(TMask_field& f) -{ - real netto = ZERO; - TMask& m = f.mask(); - const real ritenuta (m.get(MPAG_RITPAG)); - const real compenso (m.get(MPAG_COMPENSO)); - const real spesa (m.get(MPAG_SPESA)); - const real inpsperc (m.get(MPAG_INPSPERC)); - - netto = compenso - ritenuta + spesa - inpsperc; -// netto.trunc(); - f.mask().set(MPAG_NETTO, netto.string()); - - return netto; -} - +#include "770100a.h" +#include "770101.h" +#include "770102.h" +#include +// +// Lista modifiche +// +// 27.5.96 work_tipoluogo() disabilita il campo PROGRBANCA e lo abilita +// solo se e' un versamento in banca +// +// 5.6.96 Calcolo contributo INPS +// 22.7.96 Esegue controllo ritenuta solo se diversa da ZERO +// Tolti tutti i trunc() per lasciare i decimali nei conti +// 24.7.96 Non considera piu' la perc. come 100 se lasciata vuota +// + +HIDDEN TString80 tmp1, tmp2; +HIDDEN real __impo = ZERO; +HIDDEN real __compe = ZERO; +HIDDEN real __percra = ZERO; +HIDDEN TString80 __rite; +HIDDEN bool __bRicalcolaRigaPag = FALSE; +HIDDEN real __rCompensoCg = ZERO; +void CalcolaInps(const real& rPercCassaPrev,const real& rCompenso, const real &rPercContrInps, + const real& rPercAssContrInps,const real &rQuotaCommitContrInps, + real& rInpsPerc,real &rInpsComplex); + +void TSchedaPercipienti::init_mask(TMask& m) +{ + update_lasts(m); + __bRicalcolaRigaPag = FALSE; + __rCompensoCg = ZERO; + if (tipo_coll() != nessuno) + { + const bool variazione = coll_variazione(); + if (!variazione) compila_testata(m); + switch (tipo_coll()) + { + case pagamento: + case occasionale: +// Compilo riga di pagamento SOLO SE NON ce ne sono gia'.. + if ( (tipo_coll() == pagamento && _rel->pag_items() == 0) + || + tipo_coll() == occasionale ) + { + const real totrit(m.get(F_TOTRIT)); + const real totdoc(m.get(F_TOTDOC)); + const real compenso(m.get(F_COMPENS)); + const real spese(m.get(F_SPESE)); + + if ((tipo_coll() == pagamento && (_coll._compenso + totrit == totdoc) ) + || + (tipo_coll() == occasionale)) + { + TSheet_field& pags = (TSheet_field&)m.field(F_PAGAMENTI); + TRectype rpag(_rel->pag(0)); + rpag.zero(); + real& imponibile = _coll._compenso; + rpag.put("DATAPAG", _coll._datadoc); + rpag.put("COMPENSO", compenso); + rpag.put("SPESA", spese); +// forza il ricalcolo della riga pag. (da check_causale) + __bRicalcolaRigaPag = TRUE; + __rCompensoCg = compenso; +// Update spreadsheet + rec2row(pags.row(0), rpag, 0); + pags.force_update(); + } + } +// break; + default: +// per evitare di riscrivere tutto dopo registra + _coll._tipo_coll = nessuno; + break; + } + } + fill_sheet(m); +} + +// Utilizzato in collegamento da cg +real TSchedaPercipienti::calcola_ritenuta(const real& imponibile, TString& sPercRa, + real& rPercCassaPrev,real& rPercContrInps,real& rPercAssContrInps, + real& rQuotaCommitContrInps, bool& bContrInps) +{ + TTable cau("%ca7"); + TString codcau(curr_mask().get(F_CODCAUS)); + cau.zero(); + cau.put("CODTAB", codcau); + cau.read(); + real rQuotaRaCaus = cau.get_real("R0"); + sPercRa = cau.get("R0"); + bContrInps=cau.get_bool("B4"); + if (bContrInps) + { + rPercCassaPrev=cau.get_real("R5"); + rPercContrInps=cau.get_real("R1"); + rPercAssContrInps=cau.get_real("R2"); + rQuotaCommitContrInps=cau.get_real("R3"); + } + else + { + rPercCassaPrev=ZERO; + rPercContrInps=ZERO; + rPercAssContrInps=ZERO; + rQuotaCommitContrInps=ZERO; + } + real rite = ZERO; + rite = (imponibile * rQuotaRaCaus)/100.00; + return rite; +} + +// Utilizzato in collegamento da cg Forse ora da togliere.. +real TSchedaPercipienti::calcola_imponibile(const real& compenso) +{ + TTable cau("%ca7"); + TString codcau(curr_mask().get(F_CODCAUS)); + cau.zero(); + cau.put("CODTAB", codcau); + if (cau.read() != NOERR) + return ZERO; + real quota_imp = cau.get_int("R4"); + TString16 cod_qua(cau.get("S1")); + real imponibile_calcolato = ZERO; +// Calcola imponibile + if (compenso != ZERO) + imponibile_calcolato = (compenso * quota_imp) / 100.00; + return imponibile_calcolato; +} + +bool TSchedaPercipienti::vers_notify(TSheet_field& s, int r, KEY k) +{ + switch(k) + { + +// Inserimento riga + case K_INS: +// Impedisce inserimento di nuove righe + return FALSE; + +// Inizio modifica riga + case K_SPACE: + { +// Pulisco descrizioni luogo e tipo versamento (solo se non gia' indicati!) + TSheet_field& vers = app().vers(); + TMask& mp = vers.sheet_mask(); + TString16 tipo(mp.get(F_TIPOVERS)); + TString16 luo (mp.get(F_LUOVERS)); + if (tipo.empty()) + mp.reset(70); + if (luo.empty()) + mp.reset(71); + break; + } + + default: + break; + } + return TRUE; +} + +bool TSchedaPercipienti::pags_notify(TSheet_field& s, int r, KEY k) +{ + switch(k) + { + +// Inserimento riga + case K_INS: +// Impedisce inserimento di nuove righe + return FALSE; + +// Inizio modifica riga + case K_SPACE: + { + app()._azzerato_pag = FALSE; +// Se c'e' competenza => diventa obbligatoria DATAPAG + TSheet_field& pags = app().pags(); + TMask& m = app().curr_mask(); +// Salvo imponibile e compenso precedenti alla modifica. +// v. imponibile_handler e compenso_handler + TToken_string& row = pags.row(r); + __compe = row.get(1); + __impo = row.get(3); + __percra = atof(row.get(4)); + __rite = row.get(7); + if (__percra == 0.0) + __percra = atof(s.mask().get(F_PERRIT)); + const long annoc = m.get_long(F_ANNOCOMP); + const long mesec = m.get_long(F_MESECOMP); +#define F_DATAPAG 101 + TMask& mp = pags.sheet_mask(); + TEdit_field& fld = mp.efield(F_DATAPAG); + + if (annoc != 0L || mesec != 0L) + fld.check_type(CHECK_REQUIRED); + else + fld.check_type(CHECK_NONE); + break; + } + +// Fine modifica di una riga + case K_ENTER: +// Pulisco i buffer di confronto + __impo = ZERO; + __compe = ZERO; + __percra = ZERO; + __rite = ""; + break; + + default: + break; + } + return TRUE; +} + +TSheet_field& TSchedaPercipienti::pags() const +{ + TSheet_field& s = (TSheet_field&)curr_mask().field(F_PAGAMENTI); + return s; +} + +TSheet_field& TSchedaPercipienti::vers() const +{ + TSheet_field& s = (TSheet_field&)curr_mask().field(F_VERSAMENTI); + return s; +} + +bool TSchedaPercipienti::my_empty_items(TToken_string& r, bool vers) +{ + TString rr; + + if (vers) + for (int i=0; i < COLONNE_SIGNIFICATIVE_SPREADSHEET_VERSAMENTI; i++) + { + rr = r.get(i); + rr.trim(); + switch (i) { + case 0: // 1015 + if (rr.not_empty()) + return FALSE; + break; + case 1: + if (rr.not_empty()) + return FALSE; + break; + case 2: // lugo e tipo vers. + case 3: + if (rr.not_empty()) + if (rr != "N") + return FALSE; + break; + case 4: + case 5: + if (rr.not_empty()) + return FALSE; + break; + case 6: + if (rr.not_empty()) { + real rrr(real::ita2eng(rr)); + if (rrr != ZERO) + return FALSE; + } + break; + default: + break; + } + } + else + for (int i=0; i < COLONNE_SIGNIFICATIVE_SPREADSHEET_PAGAMENTI; i++) + { + rr = r.get(i); + rr.trim(); + switch (i) { + case 0: // Data + if (rr.not_empty()) + return FALSE; + break; + case 1: // Compenso + if (rr.not_empty()) { + real rrr(real::ita2eng(rr)); + if (rrr != ZERO) + return FALSE; + } + break; + case 2: // Spese e Imponibile + case 3: + if (rr.not_empty()) { + real rrr(real::ita2eng(rr)); + if (rrr != ZERO) + return FALSE; + } + break; + case 4: // r.a. che faccio ? + break; + case 5: + case 6: + if (rr.not_empty()) { + real rrr(real::ita2eng(rr)); + if (rrr != ZERO) + return FALSE; + } + break; + default: + break; + } + } + return TRUE; +} + +void TSchedaPercipienti::pag_pack() +{ + TString_array& rows = pags().rows_array(); + + const int max = rows.items(); + for (int i = 0; i < max; i++) + { + TToken_string& r = (TToken_string&)rows[i]; + if (my_empty_items(r, FALSE)) // Remove all empty strings + rows.destroy(i, FALSE); + } + + rows.pack(); +// rows.sort(compare_rows); // Pack and sort array +} + +void TSchedaPercipienti::ver_pack() +{ + TString_array& rows = vers().rows_array(); + + const int max = rows.items(); + for (int i = 0; i < max; i++) + { + TToken_string& r = (TToken_string&)rows[i]; + if (my_empty_items(r, TRUE)) // Remove all empty strings + rows.destroy(i, FALSE); + } + rows.pack(); +// rows.sort(compare_rows); // Pack and sort array +} + + +// +// LOAD_PAG_SHEET +// +// Inizializza array sheet dei pagamenti +// +void TSchedaPercipienti::load_pag_sheet(const long numvers) +{ + real comp, spese, imp, ritpag; + int i, iNumRigaAS; + + TSheet_field& pag = pags(); + _pags->destroy(); + + iNumRigaAS = 0; // numero di riga dell'array-sheet. Viene incrementato + // solo quando si trovano pagamenti 'giusti' (cioe' solo + // quando si aggiungono elementi all'array-sheet) + for ( i = 0; i < pag.items(); i++) + { + TToken_string* d = new TToken_string(64); + TToken_string& riga = pag.row(i); + +// Scarto le righe non significative + if (my_empty_items(riga, FALSE)) continue; + + const long nvers = riga.get_long(9); + +// "Se il pagamento e' gia' stato selezionato DA UN ALTRO versamento +// NON si deve vedere! " + if (nvers > 0 && nvers != numvers) + continue; + + const long npag = i; + + const int LARGHEZZA_COL = 15; + d->add(" "); // 0 spazio per la 'X' di selezione + TString dep(riga.get(0)); + d->add(dep); // 1 data pagamento + comp = riga.get(1); + dep = comp.string("."); + dep.right_just(LARGHEZZA_COL); + d->add(dep); // 2 compenso + spese = riga.get(2); + dep = spese.string("."); + dep.right_just(LARGHEZZA_COL); + d->add(dep); // 3 spese + +// NB +// se cambia posizione nriga o ritpag nella tokenstring cambia +// anche in pag_select()! + ritpag = riga.get(SS_POS_RITPAG); + dep = ritpag.string("."); + dep.right_just(LARGHEZZA_COL); + d->add(dep); + + d->add(i, SS_POS_NRIGA); +// Metto nell'array-sheet anche NUMVERS + d->add(nvers, SS_POS_NVER); + + _pags->add(*d); // aggiungo la riga nell'array_sheet +// Setto il bit alla posizione numpag e metto la X + if (nvers == numvers) + { + _selected.set(npag); + _pags->check(iNumRigaAS, TRUE); + } + iNumRigaAS++; // ignoro in questo contatore i pagamenti che NON + // si vedono (se il pagamento e' scartato prima di qui + // non ci passa) + } +} + +void TSchedaPercipienti::attach_pag_vers (int pag, long numvers) +{ + TSheet_field& pag_s = pags(); + TToken_string& riga = pag_s.row(pag); + +// setta NUMVERS nello sheet + riga.destroy(9); + riga.add(numvers, 9); + +// setta NUMVERS nel record + _rel->pag(pag).put("NUMVERS", numvers); +} + +void TSchedaPercipienti::detach_pag_vers (int pag) +{ + TSheet_field& pag_s = pags(); + TToken_string& riga = pag_s.row(pag); + + riga.destroy(9); + riga.add(-1L, 9); + +// setta NUMVERS nel record + _rel->pag(pag).put("NUMVERS", -1L); +} + +// +// VERS_ATTACHED ( numvers ) +// +// Determina se c'e' ALMENO UN pagamento collegato al versamento NUMVERS +// +bool TSchedaPercipienti::vers_attached(const long numvers) +{ + long numv = 0L; + +// Aggiorna lo sheet dei pagamenti per questo versamento + app().load_pag_sheet(numvers); + + for (int j = 0; j < _pags->items(); j++) + { +// Leggo NUMVERS + TToken_string& riga = _pags->row(j); + numv = riga.get_long(SS_POS_NVER); + + if (numv > 0L) + if (numv == numvers) + return TRUE; + } + return FALSE; +} + +// +// CHECK_PAGAMENTI +// Questo serve solo a impedire di uscire senza aver collegato almeno +// un pagamento +// +bool TSchedaPercipienti::check_pagamenti(TMask_field& f, KEY k) +{ + const long numvers = get_numvers(f); + return app().vers_attached(numvers); +} + +void TSchedaPercipienti::setta_ritvers(TMask_field& f, const real& ritenuta) +{ + TString80 rit_str(ritenuta.string()); + f.mask().set(F_RITVERS, rit_str); + f.mask().field(F_RITVERS).set_dirty(); // Forza on_hit() +} + +// Guardo se ho compilato la data OPP. il flag 1015 +// Leggo la maschera o la riga dello ss +bool TSchedaPercipienti::compilato_vers(TMask_field& f) +{ + TString16 datav; + char v1015; + + if (f.mask().is_running()) + { + datav = f.mask().get(F_DATAVERS); + v1015 = f.mask().get(F_VERS_1015)[0]; + } + else + { + TSheet_field& ver = app().vers(); + const int riga_corr = ver.selected(); + TToken_string& riga = ver.row(riga_corr); + v1015 = riga.get(0)[0]; + datav = riga.get(1); + datav.trim(); + } + return datav.not_empty() || v1015 == 'X'; +} + + +// +// GET_NUMVERS +// +// Determina il numero di versamento corrente, prendendolo : +// +// dalla maschera, se e' running SENNO' +// dalla riga corrente dello spreadsheet +// +long TSchedaPercipienti::get_numvers(TMask_field& f) +{ + long numvers = 0L; + +// Prendo il numvers da campo nascosto nella maschera + if (f.mask().is_running()) + numvers = f.mask().get_long(VERF_NUMVERS); + else + { + TSheet_field& ver = app().vers(); + const int riga_corr = ver.selected(); + TToken_string& riga = ver.row(riga_corr); + numvers = riga_corr + 1; +// numvers = riga.get_long(SS_POS_NUMVERS); + } + return numvers; +} + +bool TSchedaPercipienti::pag_azzera (TMask_field& f, KEY k) +{ + if (k == K_SPACE) + app()._azzerato_pag = TRUE; // Messo a FALSE in pag_notify + // Serve per NON far riscrivere la % di ritenuta + return TRUE; +} + +bool TSchedaPercipienti::ver_azzera (TMask_field& f, KEY k) +{ + long numvers = get_numvers(f); + int nriga = 0; + TNikArray_sheet& pags = *app()._pags; + + if (k == K_SPACE) + { + app().load_pag_sheet(numvers); + + for (int j = 0; j < pags.items(); j++) + { + TToken_string& riga = pags.row(j); + long numv = riga.get_long(SS_POS_NVER); + + if (numv > 0L) + if (numv == numvers) + { + nriga = pags.row(j).get_int(SS_POS_NRIGA); + pags.row(j).add(-1L, SS_POS_NVER); + app().detach_pag_vers(nriga); + } + } + } + return TRUE; +} + +// +// PAG_SELECT +// +// Collegamento tra versamenti e pagamenti +// +// Calcolo ritenuta = SUM(ritpag) {dei pagamenti collegati} +// +// Usa: load_pag_sheet() attach_pag_vers() e detach_pag_vers() +// +bool TSchedaPercipienti::pag_select (TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + if (!app().compilato_vers(f)) + return f.warning_box("Inserire prima la data del versamento"); + + long numvers = get_numvers(f); + long numpag = 0L; + int nriga = 0; +// 13.7.95 Ricalcola la ritenuta, azzerando contenuto precedente + real ritenuta = ZERO; + TBit_array& selected = app()._selected; + + selected.reset(); + +// Costruisce array_sheet dei pagamenti + app().load_pag_sheet(numvers); + + TNikArray_sheet& ASpags = *app()._pags; +/* + const int iPagsASheetItems = ASpags.items(); +// Metto la 'X' per quelli gia' collegati (se e' acceso il bit[NUMPAG]) + for (int j = 0; j < iPagsASheetItems; j++) + ASpags.check(j, selected[j]);*/ + +// seleziona e aggiungi alle gia' selezionate + if (ASpags.run() == K_ENTER) + { + for (int j = 0; j < ASpags.items(); j++) + { + // get effettivo numero riga pag. + nriga = ASpags.row(j).get_int(AS_POS_NRIGA); + + int mesec = -1; + int annoc = -1; // competenza + + if (ASpags.checked(j)) + { +// Scrive nello spread-sheet e nella relazione + app().attach_pag_vers(nriga, numvers); + + // Scrive nell'array_sheet (e' da qui che leggo dopo) + ASpags.row(j).add((long)numvers, AS_POS_NVER); + + TDate datapag(ASpags.row(j).get(1)); + if (mesec < 0) + { + mesec = datapag.month(); + annoc = datapag.year(); + } + else + { + if (mesec != datapag.month() || annoc != datapag.year()) +// TBI inserire un'altra riga di versamento (?) + ; + } + selected.set(numpag); + + real dep(real::ita2eng(ASpags.row(j).get(AS_POS_RITPAG))); + ritenuta += dep; + } + else // pags.checked() + { +// resetta se era stato settato prima + if (selected[numpag]) + { + selected.reset(numpag); + ASpags.row(j).add(-1L, AS_POS_NVER); + app().detach_pag_vers(nriga); + } + } + } + setta_ritvers(f, ritenuta); + } // if k==K_ENTER + } + return TRUE; +} + +#define F_SER_VERS 209 +#define F_ABI_VERS 210 +#define F_NUM_VERS 211 +#define F_CAB_VERS 212 +#define F_QUIETANZA_VERS 213 + +void TSchedaPercipienti::work_tipoluogo(TMask_field& f) +{ + TMask& m = f.mask(); + char tipo = m.get(F_TIPOVERS)[0]; + char luogo = m.get(F_LUOVERS)[0]; + TSheet_field& ss = app().vers(); + const int row = ss.selected(); + + m.hide (-2); // nasconde tutto +// ss.enable_cell(row,4); + + if (tipo == 'B') + { + m.show (-6); // ABI e CAB + m.enable(SM_PROGRBANCA); // abilita progressivo vers.banca + ss.enable_cell(row,6); + } + else + { + m.disable(SM_PROGRBANCA); + ss.disable_cell(row,6); + + if (tipo == 'D') + { + if (luogo == 'T') + { + m.show(-3); // SOLO quietanza + ss.disable_cell(row,4); + } + else + { + m.show(-4); // serie e numero + ss.enable_cell(row,4); + } + } +// else + if (tipo == 'C') + { + m.show (-5); // SOLO numero versamento + ss.disable_cell(row,4); + } + } +} + +bool TSchedaPercipienti::luo_hndl(TMask_field& f, KEY k) +{ + if (k == K_TAB) + work_tipoluogo(f); + + if (k == K_ENTER) + { + work_tipoluogo(f); + TMask& m = f.mask(); + char tipo = m.get(F_TIPOVERS)[0]; + char luogo = m.get(F_LUOVERS)[0]; + +// Se ho indicato il luogo => devo indicare anche il TIPO + if (isalpha(luogo)) + return tipo == ' ' || tipo == '\0' ? + f.warning_box("Indicare il tipo del versamento") : TRUE; + } + return TRUE; + +} + +bool TSchedaPercipienti::abicab_hndl(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + TString16 park(f.get()); + TMask& m = f.mask(); + char tipo = m.get(F_TIPOVERS)[0]; + +// ABI/CAB solo se tipo e' B + if (tipo != 'B') + return TRUE; + + for (int i=0; i 5) + { + f.reset(); + return f.warning_box("Codice CAB non valido"); + } + // controllo numericità del codice ABI/CAB + if (!isdigit(park[i])) + return f.warning_box("Il codice ABI/CAB deve essere numerico"); + } + } + return TRUE; +} + +bool TSchedaPercipienti::tipo_hndl(TMask_field& f, KEY k) +{ + if (k == K_TAB) + work_tipoluogo(f); + + if (k == K_ENTER || k == K_TAB) + { + TMask& m = f.mask(); + char tipo = m.get(F_TIPOVERS)[0]; + char luogo = m.get(F_LUOVERS)[0]; + +// Se ho indicato il tipo => devo indicare anche il LUOGO + if (isalpha(tipo)) + return luogo == ' ' || luogo == '\0' ? + f.warning_box("Indicare il luogo del versamento") : TRUE; + } + return TRUE; +} + +// +// VERS1015_HANDLER +// +bool TSchedaPercipienti::vers1015_handler(TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + TString16 datas = f.mask().get(F_DATAVERS); + const bool v1015 = f.mask().get_bool(F_VERS_1015); + const bool attaccati = check_pagamenti(f,k); + + if (attaccati) + if (!v1015 && datas.empty()) + return f.warning_box("Manca la data del versamento"); + +// Non considerare versamenti non significativi + if (v1015 || datas.not_empty()) + return attaccati ? TRUE : f.warning_box("Nessun pagamento collegato"); + + const real rite (f.mask().get(F_RITVERS)); +// Pero' se c'e' la ritenuta non lo far passare + if (rite != ZERO) + return f.warning_box("Manca la data oppure il flag di versamento 1015"); + + return TRUE; + } + + if (k == K_SPACE || k == K_F2) + { + TSheet_field& ss = app().vers(); + const bool v1015 = (f.get() == "X"); + const int row = ss.selected(); + int i; + +// Disabilito tutto MA NON ritenuta + if (v1015) + { +// Se son gia' disabilitati non fare nulla + if (ss.cell_disabled(row, 1)) + return TRUE; + + f.mask().reset(102); + f.mask().reset(103); + f.mask().reset(104); + f.mask().reset(105); + f.mask().reset(106); + + f.mask().disable(102); + f.mask().disable(103); + f.mask().disable(104); + f.mask().disable(105); + f.mask().disable(106); + + for (i=1; i<6; i++) + ss.disable_cell(row,i); + } + else + { + f.mask().enable(102); + f.mask().enable(103); + f.mask().enable(104); + f.mask().enable(105); + f.mask().enable(106); + + for (i=1; i<6; i++) + ss.enable_cell(row,i); + } + } + return TRUE; +} + +// +// Quadro C e E1: immissione per le sole persone fisiche +// +bool TSchedaPercipienti::check_causale(TMask_field& f, KEY k) +{ + TMask& m = f.mask(); + + if (k == K_TAB && m.is_running()) +// if (f.to_check(k)) + { + TFixed_string cod_caus(f.get(),3); + + if (cod_caus.empty()) + { + KEY ke = m.last_key(); + if (ke != K_QUIT && ke != K_ESC) + return f.warning_box("Manca la causale"); + } + else + { + TString16 cod_qua (m.get(F_CODQUA)); + char tipo = m.get(F_TIPOA)[0]; + + if (cod_qua == "C" || cod_qua == "E1") + if (tipo == 'G') + return f.warning_box("Con il quadro C o E1 e' possibile l'immissione" + " per le sole persone fisiche"); + if (__bRicalcolaRigaPag) + { + real rInpsComplex, rInpsPerc; + TSheet_field& pags = app().pags(); + TMask& ssMask = pags.sheet_mask(); + real rPercCassaPrev = ZERO; + real rPercContrInps = ZERO; + real rPercAssContrInps = ZERO; + real rQuotaCommitContrInps = ZERO; + bool bContrInps=FALSE; + +// aggiorna la riga ( collegamenti con 6(occas.) e 3(pag.) ) + TString sPercRa(6); + real rImpoCg = app().calcola_imponibile(__rCompensoCg); + real rRiteCg = app().calcola_ritenuta(rImpoCg,sPercRa,rPercCassaPrev, + rPercContrInps,rPercAssContrInps,rQuotaCommitContrInps,bContrInps); + TToken_string& tsRiga = pags.row(0); + tsRiga.add(rImpoCg.string(), 3); + tsRiga.add(sPercRa, 4); + tsRiga.add(rRiteCg.string(), 5); +// Calcola anche contributo INPS + if (bContrInps) + { + real rScorporaComp, rImpInps; + CalcolaInps(rPercCassaPrev,__rCompensoCg,rPercContrInps,rPercAssContrInps, + rQuotaCommitContrInps,rInpsPerc,rInpsComplex); + + TString sInpsComp(rInpsComplex.string()); + TString sInpsPerc(rInpsPerc.string()); + tsRiga.add(sInpsPerc,6); + tsRiga.add(sInpsComp,7); + } +// Calcola il netto + real rSpesa(tsRiga.get(2)); + real rNetto = __rCompensoCg-rRiteCg+rSpesa-rInpsPerc; + tsRiga.add(rNetto.string(),8); + pags.force_update(0); +// Per evitare che i valori vengano azzerati: + __compe = __rCompensoCg; + __impo = rImpoCg; + __percra = atof(sPercRa); + __rite = rRiteCg.string(); + } + } + } + return TRUE; +} + +/////////////////////////////////////////////////////////////////////////// +// +// RIGA PAGAMENTI +// +/////////////////////////////////////////////////////////////////////////// +// +// SPESA_HANDLER +// +// Forza il ricalcolo del netto se cambia la spesa +// +bool TSchedaPercipienti::spesa_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB) + f.mask().send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto + return TRUE; +} + +// CHECK_RITENUTA +// o Controlla se la ritenuta e' corretta (SOLO SE != ZERO 22.7.96) +// o Ricalcola la ritenuta se e' stata vuotata +bool TSchedaPercipienti::check_ritenuta(TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + TString rit(f.get()); + const bool changed_rit = __rite.not_empty() ? __rite != rit : FALSE; + const real imponibile(f.mask().get(MPAG_IMPONIBILE)); + + if (rit.empty()) + calcola_ritenuta(f,imponibile); + else + if (changed_rit) + f.mask().send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto + } + +// Controlla solo se RITENUTA != ZERO + if (k == K_ENTER) + { + TMask& m = f.mask(); + const bool forzatura = app().curr_mask().get_bool(F_FORCED); + real perc_ra = (m.get_real(MPAG_PERCRA) ); + if (perc_ra == ZERO) + perc_ra = 100.00; + const real imponibile (m.get(MPAG_IMPONIBILE)); + real ritenuta (m.get(MPAG_RITPAG)); + + if (ritenuta == ZERO) + return TRUE; + + real rite = ZERO; +// Se non indico la percentuale => considero come 100% + if (perc_ra != ZERO) + rite = (imponibile * perc_ra) / 100.00; + else + rite = imponibile; + + rite.trunc(); + ritenuta.trunc(); + rite.round(0); + ritenuta.round(0); + +#ifdef DBG + TString rites(rite.string()); + TString riten(ritenuta.string()); +#endif + +// Segnala solo se la ritenuta calcolata non e' compresa in quella +// letta piu' o meno 1 + if ( (rite < ritenuta-1) || (rite > ritenuta+1) ) + { +#ifdef DBG + f.warning_box("Ritenuta errata calcolo: %s trovo: %s", (const char*) rites, (const char*) riten); +#else + f.warning_box("Ritenuta errata"); +#endif + return forzatura; + } + } + return TRUE; +} + +// +// CALCOLA_IMPONIBILE +// +// Chiamato dall'handler del COMPENSO +// Calcola l'imponibile SE il compenso e' diverso da ZERO +// e lo setta nella maschera +// +real TSchedaPercipienti::calcola_imponibile(TMask_field& f, const real& compenso, + const bool force) +{ + TMask& mm = app().curr_mask(); + TMask& lm = f.mask(); + real quota_imp = mm.get_real(F_QUOTAIMP); + TString16 cod_qua = mm.get(F_CODQUA); + real imponibile_calcolato = ZERO; + const bool bContributoInps = mm.get_bool(F_FLAG_INPS); + const real imp_prec(lm.get(MPAG_IMPONIBILE)); + +// Ricalcolo sempre. NO! modifica del 4/10/95. Su richiesta di Omero + if (imp_prec != ZERO && !force) + return imp_prec; + +// Calcola imponibile + if (compenso != ZERO) + { + imponibile_calcolato = (compenso * quota_imp) / 100.00; + + // scorpora la percentuale cassa previdenza + real rPercCassaPrev=ZERO; + rPercCassaPrev = mm.get_real(F_CASSA_PREV); + imponibile_calcolato = (imponibile_calcolato / (100.00 + rPercCassaPrev)) * 100.00; + + TString impost(imponibile_calcolato.string()); + lm.set(MPAG_IMPONIBILE, impost); + } + return imponibile_calcolato; +} + +bool TSchedaPercipienti::imponibile_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + const real imponibile(f.mask().get(MPAG_IMPONIBILE)); + const bool forza_ricalcolo = __impo != imponibile; + if (__impo != imponibile) + __impo = imponibile; + if (forza_ricalcolo) + calcola_ritenuta(f, imponibile, forza_ricalcolo); + } + return TRUE; +} + +void CalcolaInps(const real& rPercCassaPrev,const real& rCompenso, + const real& rPercContrInps,const real &rPercAssContrInps, + const real& rQuotaCommitContrInps, real& rInpsPerc,real& rInpsComplex) +{ + real rScorporaComp, rImpInps; + rScorporaComp = (rCompenso / (100.00 + rPercCassaPrev)) * 100.00; + rImpInps = (rScorporaComp / 100.00) * rPercAssContrInps; + rImpInps.round(0); + rInpsComplex = (rImpInps / 100.00 ) * rPercContrInps; +// Se zero si considera 2/3 + if (rQuotaCommitContrInps == ZERO) + rInpsPerc = rInpsComplex - ((rInpsComplex * 2)/3); + else + rInpsPerc = rInpsComplex - ((rInpsComplex * rQuotaCommitContrInps)/100.00); +} + +// +// Handler del COMPENSO +// +// "Calcola ritenuta quando inserisci il compenso" +// chiama calcola_imponibile se compenso e' cambiato +// +bool TSchedaPercipienti::compenso_handler(TMask_field& f, KEY k) +{ + TMask& mm = app().curr_mask(); // main mask + TMask& lm = f.mask(); // local mask + const bool forzatura = mm.get_bool(F_FORCED); + real compenso (lm.get(MPAG_COMPENSO)); + real imponibile = ZERO; + TString16 cod_qua(mm.get(F_CODQUA)); + const bool bContributoInps = mm.get_bool(F_FLAG_INPS); + bool bCambiatoCompenso = FALSE; + + if (k == K_TAB) + { + if (__compe != ZERO && compenso == ZERO) + app()._azzerato_pag = FALSE; + + if (compenso == ZERO) + return TRUE; + + bCambiatoCompenso = __compe != ZERO ? __compe != compenso : FALSE; + if (__compe != compenso) + __compe = compenso; // per evitare di perdere l'imponibile + + imponibile = calcola_imponibile(f, compenso, bCambiatoCompenso); + +#ifdef DBG + tmp1 = imponibile.string(); + tmp2 = compenso.string(); + if (cod_qua != "E1") + if (imponibile > compenso) + warning_box("Imponibile = %s - Compenso = %s", (const char*)tmp1,(const char*)tmp2 ); +#endif + + calcola_ritenuta(f, imponibile, bCambiatoCompenso); + +// "Solo per il quadro E1 l'imponibile puo' essere maggiore del compenso" + if (cod_qua != "E1") + if (imponibile > compenso) + { + f.warning_box("L'imponibile non puo' essere" + " maggiore del compenso"); + return forzatura; + } + +// Calcolo contributo INPS + if (bContributoInps) + { + real rInpsPercPrima = lm.get_real(MPAG_INPSPERC); + real rInpsCompPrima = lm.get_real(MPAG_INPSCOMP); + real rScorporaComp, rImpInps, rInpsComplex, rInpsPerc; + real rPercCassaPrev = mm.get_real(F_CASSA_PREV); + real rPercContrInps = mm.get_real(F_PERC_INPS); + real rPercAssContrInps = mm.get_real(F_PERC_ASS_INPS); + real rQuotaCommitContrInps = mm.get_real(F_PERC_COMMIT_INPS); + CalcolaInps(rPercCassaPrev,compenso,rPercContrInps,rPercAssContrInps, + rQuotaCommitContrInps,rInpsPerc,rInpsComplex); + + TString sInpsComp(rInpsComplex.string()); + TString sInpsPerc(rInpsPerc.string()); +// Setto i compensi INPS solo se prima erano vuoti + if (rInpsPercPrima == ZERO || bCambiatoCompenso) + lm.set(MPAG_INPSPERC, sInpsPerc); + if (rInpsCompPrima == ZERO || bCambiatoCompenso) + lm.set(MPAG_INPSCOMP, sInpsComp); + } + lm.send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto + } + + if (k == K_ENTER) + { + // "Solo per il quadro E1 l'imponibile puo' essere maggiore del compenso" + if (cod_qua != "E1") + if (imponibile > compenso) + { + f.warning_box("L'imponibile non puo' essere" + " maggiore del compenso"); + return forzatura; + } + } + return TRUE; +} + +// +// CALCOLA_RITENUTA +// +// Calcola la ritenuta in base alla % r.a. indicata ( o, se vuota, a quella +// della causale ) e setta il campo della maschera +// +// --[ NB ]-- +// Ricalcola solo se VUOTA +// +bool TSchedaPercipienti::calcola_ritenuta(TMask_field& f, const real& imponibile, const bool forza, const real percent) +{ + TMask& m=f.mask(); + real rPercRaRiga = m.get_real(MPAG_PERCRA); + real rPercRaCaus = app().curr_mask().get_real(F_PERRIT); + const bool azzerato = app()._azzerato_pag; + const real rit_prec(m.get(MPAG_RITPAG)); + + if (rit_prec != ZERO && !forza) + return FALSE; + + real rPerc = ZERO; +// Uso la percentuale della causale SE NON indicata qui E +// SE NON viene passata come parametro (in percra_handler quando si cambia +// l'aliquota) + if (percent == ZERO) + rPerc = rPercRaRiga != ZERO ? rPercRaRiga : rPercRaCaus; + else + rPerc = percent; +// +// Faccio vedere % R.A. presa dalla causale se non l'ho indicata +// e se non ho premuto Azzera (1.12.95) +// Pero' se uno fa azzera e poi riscrive il compenso deve riapparire... +// +// const bool prendi_ra_da_causale = forza ? TRUE : perc_ra == ZERO && !azzerato; + const bool prendi_ra_da_causale = rPercRaRiga == ZERO && !azzerato; + if (prendi_ra_da_causale) + { + TString quota_rast(rPercRaCaus.string()); + m.set(MPAG_PERCRA, quota_rast); + } + +// Calcolo ritenuta ... + real rite = (imponibile * rPerc) / 100.00; + +// .. riempie il campo corrispondente + TString ritest(rite.string()); + m.set(MPAG_RITPAG, ritest); + m.send_key(K_TAB, MPAG_NETTO); // forza il ricalcolo del netto + return TRUE; +} + +// +// Handler della percentuale di r.a. +// ricalcolo la ritenuta quando cambia +// +bool TSchedaPercipienti::percra_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + const real compenso (f.mask().get(MPAG_COMPENSO)); + const real imponibile (f.mask().get(MPAG_IMPONIBILE)); + real percra(f.get()); + const bool forza_ricalcolo = __percra != percra; + if (__percra != percra) + __percra = percra; + + if (compenso != ZERO) + { + if (forza_ricalcolo) + calcola_ritenuta (f, imponibile, forza_ricalcolo); + } + } + return TRUE; +} + +bool TSchedaPercipienti::netto_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB) + calcola_netto(f); + return TRUE; +} + +// +// Calcola e setta il NETTO +// +// Il netto e' ricalcolato e settato sempre visto che non e' gestibile +// +real TSchedaPercipienti::calcola_netto(TMask_field& f) +{ + real netto = ZERO; + TMask& m = f.mask(); + const real ritenuta (m.get(MPAG_RITPAG)); + const real compenso (m.get(MPAG_COMPENSO)); + const real spesa (m.get(MPAG_SPESA)); + const real inpsperc (m.get(MPAG_INPSPERC)); + + netto = compenso - ritenuta + spesa - inpsperc; +// netto.trunc(); + f.mask().set(MPAG_NETTO, netto.string()); + + return netto; +} + diff --git a/m770/771100c.uml b/m770/771100c.uml index 154ed32fd..809131224 100755 --- a/m770/771100c.uml +++ b/m770/771100c.uml @@ -61,8 +61,9 @@ BEGIN FLAGS "D" USE LF_NDITTE INPUT CODDITTA F_CODDITTA - FIELD LF_NDITTE->RAPPR - JOIN LF_ANAG INTO CODANAGR=RAPPR TIPOA="F" + FIELD LF_NDITTE->RAPPR + CHECKTYPE NORMAL + JOIN LF_ANAG INTO CODANAGR==RAPPR TIPOA=="F" JOIN LF_ANAGFIS TO LF_ANAG INTO CODANAGR=CODANAGR JOIN LF_COMUNI TO LF_ANAGFIS INTO COM==COMNASC JOIN LF_COMUNI TO LF_ANAG ALIAS 1 INTO COM==COMRES diff --git a/m770/771200b.uml b/m770/771200b.uml index 463821ba9..ddd17b9bd 100755 --- a/m770/771200b.uml +++ b/m770/771200b.uml @@ -1,976 +1,977 @@ -#include "771200.h" -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE - -PAGE "1" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER QAF_CODDITTA 5 -BEGIN - PROMPT 80 80 "" - FLAGS "D" - FIELD LF_QUAA->CODDITTA - KEY 1 - GROUP 10 -END - -NUMBER F_CODIP 6 -BEGIN - PROMPT 17 1 "" - USE LF_DIPEND KEY 1 - FIELD LF_QUAA->CODDIP - INPUT CODDITTA QAF_CODDITTA - INPUT CODDIP F_CODIP - DISPLAY "Cognome@24" COGNOME - DISPLAY "Nome@20" NOME - OUTPUT QAF_COGNOME COGNOME - OUTPUT QAF_NOME NOME - CHECKTYPE REQUIRED - FLAGS "DG" - GROUP 10 - MESSAGE COPY,2@ - KEY 1 -END - -STRING QAF_COGNOME 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 10 - MESSAGE COPY,3@ -END - -STRING QAF_NOME 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 10 - MESSAGE COPY,4@ -END - -NUMBER QAF_NPROG 4 -BEGIN - PROMPT 72 1 "" - FIELD LF_QUAA->NPROG - FLAGS "DG" - KEY 1 - GROUP 10 - MESSAGE COPY,5@ -END - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 3 "@bDati relativi al rapporto di lavoro" -END - -LISTBOX QAF_AREAATT 1 19 -BEGIN - PROMPT 2 4 "13 Area attività " - ITEM " |" - ITEM "A|Area amministrativa" - ITEM "B|Area vendita" - ITEM "C|Area produzione" - ITEM "D|Aree non definite" - FIELD LF_QUAA->AREAATT - GROUP G_ALL -END - -STRING QAF_TIPOATT 1 -BEGIN - PROMPT 42 4 "14 Tipo " - SHEET "Codice|Descrizione@70" - INPUT QAF_TIPOATT - ITEM " |" - ITEM "A|Tempo parziale" - ITEM "B|Apprendistato" - ITEM "C|Formazione lavoro" - OUTPUT QAF_TIPOATT - FIELD LF_QUAA->TIPO - FLAGS "U" - GROUP G_ALL -END - -NUMBER F_NUMGIORNI 3 -BEGIN - PROMPT 55 4 "15 Numero giorni " - FIELD LF_QUAA->NUMGIO - GROUP G_ALL -END - -DATE F_DATAFR -BEGIN - PROMPT 2 5 "16 Data fine rapporto " - FIELD LF_QUAA->DATAFR - GROUP G_ALL -END - -NUMBER QAF_GIODET 3 -BEGIN - PROMPT 40 5 "17 Num.gio.det.lav.dip " - FIELD LF_QUAA->NUMGIODET - NUM_EXPR {(#THIS>=0)&&(#THIS<=366)} - WARNING "I giorni detrazione per lav.dip. devono essere compresi tra 0 e 366" - GROUP G_ALL -END - -STRING F_CODFISDL 16 -BEGIN - PROMPT 2 6 "18 Cod.fis.prec.dat.lav. " - FIELD LF_QUAA->CFDLPREC - FLAGS "U" - VALIDATE CF_FUNC F_CODFISDL - GROUP G_ALL -END - -NUMBER F_CAUSA 1 -BEGIN - PROMPT 60 6 "19 Causa " - FIELD LF_QUAA->CAUSA - SHEET "Codice|Descrizione@60" - INPUT F_CAUSA - ITEM " |Niente" - ITEM "1|Fusione (anche per incorporazione)" - ITEM "2|Scissione" - ITEM "3|Conferimento o cessione a titolo oneroso" - ITEM "4|Esercizio della facolta' prevista da art.23, comma 7..." - ITEM "5|Altro" - ITEM "6|Forme pensionistiche complementari (I num.d'ordine)" - ITEM "7|Forme pensionistiche complementari (II num.d'ordine)" - OUTPUT F_CAUSA - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 8 "@bCompensi lordi, stipendi, pensioni ecc." -END - -NUMBER F_DENARO 15 -BEGIN - PROMPT 2 9 "20 In denaro " - FIELD LF_QUAA->DENARO - PICTURE "." - GROUP G_ALL -END - -NUMBER F_NATURA 15 -BEGIN - PROMPT 45 9 "21 In natura " - FIELD LF_QUAA->NATURA - PICTURE "." - GROUP G_ALL -END - -NUMBER F_COBBDIP21 15 -BEGIN - PROMPT 2 11 "22 Contr.obb.car. dip. " - HELP "Contributi obbligatori a carico del dipendente" - FIELD LF_QUAA->COBBDIP - PICTURE "." - GROUP G_ALL -END - -NUMBER F_COMPNETTI 15 -BEGIN - PROMPT 45 11 "23 Compensi netti" - FIELD LF_QUAA->COMPNETTI - PICTURE "." - FLAGS "D" - GROUP G_2342 -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 13 "@bIndennita' e assegni ex Art.48, C.4 e 5, T.U.I.R." -END - -NUMBER F_AMMLORDO24 15 -BEGIN - PROMPT 2 14 "24 Ammontare lordo " - FIELD LF_QUAA->AMMLORDO - PICTURE "." - GROUP G_ALL -END - -NUMBER F_IACOBBCD25 15 -BEGIN - PROMPT 39 14 "25 Contr.obb.car. dip. " - FIELD LF_QUAA->IACOBBCD - PICTURE "." - HELP "Contributi obbligatori a carico del dipendente" - GROUP G_ALL -END - -NUMBER QAF_SVNSOGRIT 15 -BEGIN - PROMPT 2 15 "26 Som.v.non sog.rit." - FIELD LF_QUAA->NORIT - PICTURE "." - GROUP G_ALL -END - -NUMBER F_TOTIMP26 15 -BEGIN - PROMPT 39 15 "27 Totale imponibile " - FIELD LF_QUAA->TOTIMP - PICTURE "." - GROUP G_ALL -END - -ENDPAGE - -PAGE "2" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -NUMBER F_AIEREP23 15 -BEGIN - PROMPT 2 3 "28 Assegni indennita' erogati da enti previdenziali " - FIELD LF_QUAA->AIENTIPREV - PICTURE "." - HELP "Assegni e indennita' erogati da enti previdenziali" - GROUP G_ALL -END - -NUMBER F_CCTAMMCONT 15 -BEGIN - PROMPT 2 4 "29 Ammontare compensi corrisposti da terzi " - FIELD LF_QUAA->CCTAMMCONT - PICTURE "." - GROUP G_ALL -END - -NUMBER F_TOTIMP29 15 -BEGIN - PROMPT 2 5 "30 Totale imponibile " - FIELD LF_QUAA->TOTIMP2 - PICTURE "." - GROUP G_ALL -END - -NUMBER F_ICTOTIMP30 15 -BEGIN - PROMPT 2 6 "31 Imposta corrispondente totale imponibile " - FIELD LF_QUAA->ICTOTIMP - PICTURE "." - HELP "Imposta corrispondente al totale imponibile" - GROUP G_ALL -END - -NUMBER F_DETCC 15 -BEGIN - PROMPT 2 7 "32 Detr.coniuge carico " - FIELD LF_QUAA->DETCC - PICTURE "." - HELP "Detrazione per coniuge a carico" - GROUP G_ALL -END - -NUMBER F_DETFC 15 -BEGIN - PROMPT 41 7 "33 Detr.figli carico " - FIELD LF_QUAA->DETFC - PICTURE "." - HELP "Detrazione per figli a carico" - GROUP G_ALL -END - -NUMBER F_DETAF 15 -BEGIN - PROMPT 2 8 "34 Det.altri fam.carico" - FIELD LF_QUAA->DETAF - PICTURE "." - HELP "Detrazione per altri famigliari a carico" - GROUP G_ALL -END - -NUMBER F_DETLD 15 -BEGIN - PROMPT 41 8 "35 Detr.lav. dipend. " - FIELD LF_QUAA->DETLD - PICTURE "." - HELP "Detrazione per lavoro dipendente" - GROUP G_ALL -END - -NUMBER F_DETO 15 -BEGIN - PROMPT 2 9 "36 Detr. per oneri " - FIELD LF_QUAA->DETO - PICTURE "." - HELP "Detrazione per oneri" - GROUP G_ALL -END - -NUMBER F_TOTDET36 15 -BEGIN - PROMPT 41 9 "37 Totale detrazione " - FIELD LF_QUAA->TOTDET - PICTURE "." - GROUP G_ALL -END - -NUMBER QAF_INCDETFC 15 -BEGIN - PROMPT 2 10 "38 Inc.detr.figli a ca." - FIELD LF_QUAA->INCDETFC - PICTURE "." - GROUP G_ALL -END - -NUMBER F_AMRIOT37 15 -BEGIN - PROMPT 2 11 "39 Ammontare delle ritenute operate da terzi" - FIELD LF_QUAA->AMRIOT - PICTURE "." - HELP "Ammontare delle ritenute operate da terzi" - GROUP G_ALL -END - -NUMBER F_AMRIODL38 15 -BEGIN - PROMPT 2 12 "40 Ammontare ritenute operate datore lavoro " - FIELD LF_QUAA->AMRIODL - PICTURE "." - HELP "Ammontare delle ritenute operate dal datore di lavoro" - GROUP G_ALL -END - -NUMBER F_ECCRITRIMB 15 -BEGIN - PROMPT 2 13 "41 Eccedenza delle ritenute da rimborsare " - FIELD LF_QUAA->ECCRITRIMB - PICTURE "." - HELP "Eccedenza delle ritenute da rimborsare" - GROUP G_ALL -END - -NUMBER F_AMMRITDOV 15 -BEGIN - PROMPT 2 14 "42 Ammont.riten. dovute" - FIELD LF_QUAA->AMMRITDOV - PICTURE "." - HELP "Ammontare delle ritenute dovute" - FLAGS "D" - GROUP G_2342 -END - -NUMBER F_ERSPSAN41 15 -BEGIN - PROMPT 41 14 "43 Er.spese sanitarie" - FIELD LF_QUAA->ERSPSAN - PICTURE "." - HELP "Erogazioni per spese sanitarie, anche in forma assicurativa" - GROUP G_ALL -END - -NUMBER F_PRASSVI42 15 -BEGIN - PROMPT 2 15 "44 Premi di assicurazione vita e infortuni " - FIELD LF_QUAA->PRASSVI - PICTURE "." - HELP "Premi di assicurazione vita e infortuni" - GROUP G_ALL -END - -NUMBER F_CONPRECO43 15 -BEGIN - PROMPT 2 16 "45 Contributi per previdenza complementare " - FIELD LF_QUAA->CONPRECO - PICTURE "." - HELP "Contributi per previdenza complementare" - GROUP G_ALL -END - -ENDPAGE - -PAGE "3" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -GROUPBOX DLG_NULL 78 6 -BEGIN - PROMPT 1 3 "@bArretrati relativi ad anni precedenti" -END - -NUMBER F_COBBDIP44 15 -BEGIN - PROMPT 2 4 "46 Cont.obb.carico dip." - FIELD LF_QUAA->COBBDIP2 - PICTURE "." - HELP "Contributi obbligatori a carico del dipendente" - GROUP G_ALL -END - -NUMBER F_AMMIMP45 15 -BEGIN - PROMPT 41 4 "47 Ammontare imponib." - FIELD LF_QUAA->AMMIMP - PICTURE "." - HELP "Ammontare imponibile" - GROUP G_ALL -END - -NUMBER F_DETIMPOS46 15 -BEGIN - PROMPT 2 5 "48 Detrazioni d'imposta" - FIELD LF_QUAA->DETIMPOS - PICTURE "." - GROUP G_ALL -END - -NUMBER F_RITESEG47 15 -BEGIN - PROMPT 41 5 "49 Ritenuta eseguita " - FIELD LF_QUAA->RITESEG - PICTURE "." - GROUP G_ALL -END - -NUMBER F_SVNASSRI48 15 -BEGIN - PROMPT 2 6 "50 Altre somme e valori non ass.a ritenuta " - FIELD LF_QUAA->SVNASSRI - PICTURE "." - GROUP G_ALL -END - -NUMBER F_AIFCSSN49 15 -BEGIN - PROMPT 2 7 "51 Ammontare imponibile ai fini del C.S.S.N." - FIELD LF_QUAA->AIFCSSN - PICTURE "." - HELP "Ammontare imponibile ai fini del C.S.S.N." - GROUP G_ALL -END - -TEXT DLG_NULL -BEGIN - PROMPT 1 9 "@bVERSAMENTI E RIMBORSI CONSEGUENTI ALL'ASSISTENZA FISCALE " -END - -GROUPBOX DLG_NULL 0 3 -BEGIN - PROMPT 1 10 "@bAssistenza 1995" -END - -STRING F_CONEFF50 1 -BEGIN - PROMPT 2 11 "52 conguagli non effettuati nel 95 " - FIELD LF_QUAA->CONEFF - SHEET "Codice|Descrizione@60" - INPUT F_CONEFF50 - ITEM " |Niente" - ITEM "A|Cessazione del rapporto di lavoro" - ITEM "B|Aspettativa senza retribuzione" - ITEM "C|Decesso" - ITEM "D|Richiesta di minore secondo acconto" - ITEM "E|Retribuzione insufficiente" - ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" - OUTPUT F_CONEFF50 - FLAGS "U" - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 13 "@bSeconda rata acconto IRPEF 1995" -END - -NUMBER F_IMPVERS51 15 -BEGIN - PROMPT 2 14 "53 Imposta vers. " - FIELD LF_QUAA->IMPVERS - PICTURE "." - GROUP G_ALL -END - -NUMBER F_ISOPTAS52 15 -BEGIN - PROMPT 37 14 "54 Interessi " - FIELD LF_QUAA->INTERE - PICTURE "." - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 16 "@bSeconda rata acconto C.S.S.N. 1995" -END - -NUMBER F_CONTRVER53 15 -BEGIN - PROMPT 2 17 "55 Contr. versato" - FIELD LF_QUAA->CSSN95CV - PICTURE "." - GROUP G_ALL -END - -NUMBER F_ISOPTAS54 15 -BEGIN - PROMPT 37 17 "56 Interessi " - FIELD LF_QUAA->INTERE2 - PICTURE "." - GROUP G_ALL -END - -ENDPAGE - -PAGE "4" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 3 "@bAssistenza 1996" -END - -STRING F_CNEFF55 1 -BEGIN - PROMPT 2 4 "57 Conguagli n/eff. " - FIELD LF_QUAA->CNEFF - SHEET "Codice|Descrizione@85" - INPUT F_CNEFF55 - ITEM " |Niente" - ITEM "A|Cessazione del rapporto di lavoro" - ITEM "B|Aspettativa senza retribuzione" - ITEM "C|Decesso" - ITEM "D|Richiesta di minore secondo acconto" - ITEM "E|Retribuzione insufficiente" - ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" - ITEM "G|Rimborso non effettuato o rimborso effettuato parzialm..." - OUTPUT F_CNEFF55 - FLAGS "U" - GROUP G_ALL -END - -STRING F_RETCON56 1 -BEGIN - PROMPT 37 4 "58 Rettifica conguaglio " - FIELD LF_QUAA->RETCON - SHEET "Cod.|Descrizione@60" - INPUT F_RETCON56 - ITEM " | " - ITEM "A|Rettifica importi da conguagliare... (I num. d'ordine)" - ITEM "B|Rettifica importi da conguagliare... (II num. d'ordine)" - ITEM "C|Cong. a seguito rett. prec. comunicaz. tardivam. perven..." - ITEM "D|Cong. a seguito rett. prec. comunicaz. tempestivam. perven..." - ITEM "E|Cong. tardivo per mod.730-4 pervenuto tardivamente" - ITEM "F|Cong. tardivo per causa dipendente dal sostituto d'imposta" - OUTPUT F_RETCON56 - FLAGS "U" -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 6 "@bSaldo IRPEF per il 1995" -END - -NUMBER F_IMPRIMB57 15 -BEGIN - PROMPT 2 7 "59 Impo. rimborsata " - FIELD LF_QUAA->IMPRIMB - PICTURE "." - GROUP G_ALL -END - -NUMBER F_IMPVER58 15 -BEGIN - PROMPT 44 7 "60 Imposta versata" - FIELD LF_QUAA->IMPVER - PICTURE "." - GROUP G_ALL -END - -NUMBER F_INTIRPEF59 15 -BEGIN - PROMPT 2 8 "61 Interessi " - FIELD LF_QUAA->INTIRPEF - PICTURE "." - HELP "Interessi IRPEF" - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 10 "@bPrima rata acconto IRPEF per il 1996" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 11 "62 Impo. versata " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 11 "62 I.ver/tr.IRPEF" - GROUP G_730 -END - -NUMBER F_IMPVER60 15 -BEGIN - PROMPT 23 11 "" - FIELD LF_QUAA->IMPVER2 - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 11 "63 Interessi " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 11 "63 I.ri.IRPEF" - GROUP G_730 -END - -NUMBER F_INTER61 15 -BEGIN - PROMPT 61 11 "" - FIELD LF_QUAA->INTER - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 12 "64 Soprattasse saldo IRPEF per 95 e prima rata acconto 96 " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 12 "64 Prima rata di acconto IRPEF per il 1996 " - GROUP G_730 -END - -NUMBER F_STSIRPEF62 15 -BEGIN - PROMPT 61 12 "" - FIELD LF_QUAA->STSIRPEF - PICTURE "." - HELP "Interessi IRPEF" -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 14 "@bSaldo C.S.S.N. per il 1995" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 15 "65 Contr. rimborso " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 15 "65 2rata ac.IRPEF96" - GROUP G_730 -END - -NUMBER F_CONRIMB63 15 -BEGIN - PROMPT 21 15 "" - FIELD LF_QUAA->CONRIMB - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 15 "66 Contr.versato " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 15 "66 I.v.trat.CSSN " - GROUP G_730 -END - -NUMBER F_CONVER64 15 -BEGIN - PROMPT 61 15 "" - FIELD LF_QUAA->CONVER - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 16 "67 Interessi " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 16 "67 Imp. rimb. CSSN " - GROUP G_730 -END - -NUMBER F_INTER65 15 -BEGIN -// "Interessi " - PROMPT 21 16 "" - FIELD LF_QUAA->INTER2 - PICTURE "." -END - -ENDPAGE - -PAGE "5" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 3 "@bPrima rata acconto C.S.S.N. per il 1996" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 4 "68 Contr. versato " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 4 "68 1r.acc.CSSN 96 " - GROUP G_730 -END - -NUMBER F_CONVER66 15 -BEGIN -// "Contributo versato " - PROMPT 21 4 "" - FIELD LF_QUAA->CONVER2 - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 4 "69 Interessi " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 44 4 "69 2r.acc.CSSN 96" - GROUP G_730 -END - -NUMBER F_INTER67 15 -BEGIN -// "69 Interessi " - PROMPT 61 4 "" - FIELD LF_QUAA->INTER3 - PICTURE "." -END - -NUMBER F_STSCSSN68 15 -BEGIN - PROMPT 2 5 "70 Soprattasse saldo C.S.S.N. 95 e prima rata acconto 96 " - FIELD LF_QUAA->STSCSSN70 - GROUP G_ALL - PICTURE "." -END - -NUMBER F_SEGDICNL69 2 -BEGIN - PROMPT 2 6 "71 Mod.730/96 non liquidabile " - FIELD LF_QUAA->M730NLIQ - FLAGS "Z" - SHEET "Codice|Descrizione@60" - INPUT F_SEGDICNL69 - ITEM " |Niente" - ITEM "01|Errata o incomp. compilaz. dati anagr. e di res. del dich." - ITEM "02|Errata o incomp. compilaz. dati del coniuge e fam. a carico" - ITEM "03|Errata o incomp. compilaz. dati anagr. e di res. del coniuge" - ITEM "04|Errata o incomp. dichiaraz. q. A Mod.730/96 del dich." - ITEM "05|Errata o incomp. dichiaraz. q. A Mod.730/96 del coniuge" - ITEM "06|Errata o incomp. dichiaraz. q. B Mod.730/96 del dich." - ITEM "07|Errata o incomp. dichiaraz. q. B Mod.730/96 del coniuge" - ITEM "08|Errata o incomp. dichiaraz. q. C Mod.730/96 del dich." - ITEM "09|Errata o incomp. dichiaraz. q. D Mod.730/96 del dich." - ITEM "10|Errata o incomp. dichiaraz. q. E Mod.730/96 del dich." - ITEM "11|Errata o incomp. dichiaraz. q. E Mod.730/96 del coniuge" - ITEM "12|Errata o incomp. dichiaraz. q. F Mod.730/96 del dich." - ITEM "13|Errata o incomp. dichiaraz. q. F Mod.730/96 del coniuge" - OUTPUT F_SEGDICNL69 - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 10 "@bDati identificativi del C.A.A.F che ha prestato assistenza " -END - -NUMBER F_CODCAAF 5 -BEGIN - PROMPT 2 11 "Codice " - FIELD LF_QUAA->CODCAAF - USE %CAF - CHECKTYPE NORMAL - INPUT CODTAB F_CODCAAF - DISPLAY "Codice" CODTAB - DISPLAY "Denominazione@50" S0 - DISPLAY "N.ro iscrizione" I1 - DISPLAY "Codice fiscale@16" S1 - OUTPUT F_CODCAAF CODTAB - OUTPUT F_DENCAAF S0 - OUTPUT F_NISCRA I1 - OUTPUT F_CODFISCAAF S1 - GROUP G_ALL -END - -STRING F_DENCAAF 50 -BEGIN - PROMPT 26 11 "" - FLAGS "DU" -END - -STRING F_CODFISCAAF 16 -BEGIN - PROMPT 2 12 "72 Cod.fiscale " - FLAGS "D" -END - -NUMBER F_NISCRA 5 -BEGIN - PROMPT 50 12 "74 N.iscrizione albo " - FLAGS "D" -END - -ENDPAGE - -ENDMASK +#include "771200.h" +TOOLBAR "" 0 20 0 2 +#include +ENDPAGE + +PAGE "1" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER QAF_CODDITTA 5 +BEGIN + PROMPT 80 80 "" + FLAGS "D" + FIELD LF_QUAA->CODDITTA + KEY 1 + GROUP 10 +END + +NUMBER F_CODIP 6 +BEGIN + PROMPT 17 1 "" + USE LF_DIPEND KEY 1 + FIELD LF_QUAA->CODDIP + INPUT CODDITTA QAF_CODDITTA + INPUT CODDIP F_CODIP + DISPLAY "Cognome@24" COGNOME + DISPLAY "Nome@20" NOME + OUTPUT QAF_COGNOME COGNOME + OUTPUT QAF_NOME NOME + CHECKTYPE REQUIRED + FLAGS "DG" + GROUP 10 + MESSAGE COPY,2@ + KEY 1 +END + +STRING QAF_COGNOME 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 10 + MESSAGE COPY,3@ +END + +STRING QAF_NOME 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 10 + MESSAGE COPY,4@ +END + +NUMBER QAF_NPROG 4 +BEGIN + PROMPT 72 1 "" + FIELD LF_QUAA->NPROG + FLAGS "DG" + KEY 1 + GROUP 10 + MESSAGE COPY,5@ +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 3 "@bDati relativi al rapporto di lavoro" +END + +LISTBOX QAF_AREAATT 1 19 +BEGIN + PROMPT 2 4 "13 Area attività " + ITEM " |" + ITEM "A|Area amministrativa" + ITEM "B|Area vendita" + ITEM "C|Area produzione" + ITEM "D|Aree non definite" + FIELD LF_QUAA->AREAATT + GROUP G_ALL +END + +STRING QAF_TIPOATT 1 +BEGIN + PROMPT 42 4 "14 Tipo " + SHEET "Codice|Descrizione@70" + INPUT QAF_TIPOATT + ITEM " |" + ITEM "A|Tempo parziale" + ITEM "B|Apprendistato" + ITEM "C|Formazione lavoro" + OUTPUT QAF_TIPOATT + FIELD LF_QUAA->TIPO + FLAGS "U" + GROUP G_ALL +END + +NUMBER F_NUMGIORNI 3 +BEGIN + PROMPT 55 4 "15 Numero giorni " + FIELD LF_QUAA->NUMGIO + GROUP G_ALL +END + +DATE F_DATAFR +BEGIN + PROMPT 2 5 "16 Data fine rapporto " + FIELD LF_QUAA->DATAFR + GROUP G_ALL +END + +NUMBER QAF_GIODET 3 +BEGIN + PROMPT 40 5 "17 Num.gio.det.lav.dip " + FIELD LF_QUAA->NUMGIODET + NUM_EXPR {(#THIS>=0)&&(#THIS<=366)} + WARNING "I giorni detrazione per lav.dip. devono essere compresi tra 0 e 366" + GROUP G_ALL +END + +STRING F_CODFISDL 16 +BEGIN + PROMPT 2 6 "18 Cod.fis.prec.dat.lav. " + FIELD LF_QUAA->CFDLPREC + FLAGS "U" + VALIDATE CF_FUNC F_CODFISDL + GROUP G_ALL +END + +NUMBER F_CAUSA 1 +BEGIN + PROMPT 60 6 "19 Causa " + FIELD LF_QUAA->CAUSA + SHEET "Codice|Descrizione@60" + INPUT F_CAUSA + ITEM " |Niente" + ITEM "1|Fusione (anche per incorporazione)" + ITEM "2|Scissione" + ITEM "3|Conferimento o cessione a titolo oneroso" + ITEM "4|Esercizio della facolta' prevista da art.23, comma 7..." + ITEM "5|Altro" + ITEM "6|Forme pensionistiche complementari (I num.d'ordine)" + ITEM "7|Forme pensionistiche complementari (II num.d'ordine)" + OUTPUT F_CAUSA + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 8 "@bCompensi lordi, stipendi, pensioni ecc." +END + +NUMBER F_DENARO 15 +BEGIN + PROMPT 2 9 "20 In denaro " + FIELD LF_QUAA->DENARO + PICTURE "." + GROUP G_ALL +END + +NUMBER F_NATURA 15 +BEGIN + PROMPT 45 9 "21 In natura " + FIELD LF_QUAA->NATURA + PICTURE "." + GROUP G_ALL +END + +NUMBER F_COBBDIP21 15 +BEGIN + PROMPT 2 11 "22 Contr.obb.car. dip. " + HELP "Contributi obbligatori a carico del dipendente" + FIELD LF_QUAA->COBBDIP + PICTURE "." + GROUP G_ALL +END + +NUMBER F_COMPNETTI 15 +BEGIN + PROMPT 45 11 "23 Compensi netti" + FIELD LF_QUAA->COMPNETTI + PICTURE "." + FLAGS "D" + GROUP G_2342 +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 13 "@bIndennita' e assegni ex Art.48, C.4 e 5, T.U.I.R." +END + +NUMBER F_AMMLORDO24 15 +BEGIN + PROMPT 2 14 "24 Ammontare lordo " + FIELD LF_QUAA->AMMLORDO + PICTURE "." + GROUP G_ALL +END + +NUMBER F_IACOBBCD25 15 +BEGIN + PROMPT 39 14 "25 Contr.obb.car. dip. " + FIELD LF_QUAA->IACOBBCD + PICTURE "." + HELP "Contributi obbligatori a carico del dipendente" + GROUP G_ALL +END + +NUMBER QAF_SVNSOGRIT 15 +BEGIN + PROMPT 2 15 "26 Som.v.non sog.rit." + FIELD LF_QUAA->NORIT + PICTURE "." + GROUP G_ALL +END + +NUMBER F_TOTIMP26 15 +BEGIN + PROMPT 39 15 "27 Totale imponibile " + FIELD LF_QUAA->TOTIMP + PICTURE "." + GROUP G_ALL +END + +ENDPAGE + +PAGE "2" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +NUMBER F_AIEREP23 15 +BEGIN + PROMPT 2 3 "28 Assegni indennita' erogati da enti previdenziali " + FIELD LF_QUAA->AIENTIPREV + PICTURE "." + HELP "Assegni e indennita' erogati da enti previdenziali" + GROUP G_ALL +END + +NUMBER F_CCTAMMCONT 15 +BEGIN + PROMPT 2 4 "29 Ammontare compensi corrisposti da terzi " + FIELD LF_QUAA->CCTAMMCONT + PICTURE "." + GROUP G_ALL +END + +NUMBER F_TOTIMP29 15 +BEGIN + PROMPT 2 5 "30 Totale imponibile " + FIELD LF_QUAA->TOTIMP2 + PICTURE "." + GROUP G_ALL +END + +NUMBER F_ICTOTIMP30 15 +BEGIN + PROMPT 2 6 "31 Imposta corrispondente totale imponibile " + FIELD LF_QUAA->ICTOTIMP + PICTURE "." + HELP "Imposta corrispondente al totale imponibile" + GROUP G_ALL +END + +NUMBER F_DETCC 15 +BEGIN + PROMPT 2 7 "32 Detr.coniuge carico " + FIELD LF_QUAA->DETCC + PICTURE "." + HELP "Detrazione per coniuge a carico" + GROUP G_ALL +END + +NUMBER F_DETFC 15 +BEGIN + PROMPT 41 7 "33 Detr.figli carico " + FIELD LF_QUAA->DETFC + PICTURE "." + HELP "Detrazione per figli a carico" + GROUP G_ALL +END + +NUMBER F_DETAF 15 +BEGIN + PROMPT 2 8 "34 Det.altri fam.carico" + FIELD LF_QUAA->DETAF + PICTURE "." + HELP "Detrazione per altri famigliari a carico" + GROUP G_ALL +END + +NUMBER F_DETLD 15 +BEGIN + PROMPT 41 8 "35 Detr.lav. dipend. " + FIELD LF_QUAA->DETLD + PICTURE "." + HELP "Detrazione per lavoro dipendente" + GROUP G_ALL +END + +NUMBER F_DETO 15 +BEGIN + PROMPT 2 9 "36 Detr. per oneri " + FIELD LF_QUAA->DETO + PICTURE "." + HELP "Detrazione per oneri" + GROUP G_ALL +END + +NUMBER F_TOTDET36 15 +BEGIN + PROMPT 41 9 "37 Totale detrazione " + FIELD LF_QUAA->TOTDET + PICTURE "." + GROUP G_ALL +END + +NUMBER QAF_INCDETFC 15 +BEGIN + PROMPT 2 10 "38 Inc.detr.figli a ca." + FIELD LF_QUAA->INCDETFC + PICTURE "." + GROUP G_ALL +END + +NUMBER F_AMRIOT37 15 +BEGIN + PROMPT 2 11 "39 Ammontare delle ritenute operate da terzi" + FIELD LF_QUAA->AMRIOT + PICTURE "." + HELP "Ammontare delle ritenute operate da terzi" + GROUP G_ALL +END + +NUMBER F_AMRIODL38 15 +BEGIN + PROMPT 2 12 "40 Ammontare ritenute operate datore lavoro " + FIELD LF_QUAA->AMRIODL + PICTURE "." + HELP "Ammontare delle ritenute operate dal datore di lavoro" + GROUP G_ALL +END + +NUMBER F_ECCRITRIMB 15 +BEGIN + PROMPT 2 13 "41 Eccedenza delle ritenute da rimborsare " + FIELD LF_QUAA->ECCRITRIMB + PICTURE "." + HELP "Eccedenza delle ritenute da rimborsare" + GROUP G_ALL +END + +NUMBER F_AMMRITDOV 15 +BEGIN + PROMPT 2 14 "42 Ammont.riten. dovute" + FIELD LF_QUAA->AMMRITDOV + PICTURE "." + HELP "Ammontare delle ritenute dovute" + FLAGS "D" + GROUP G_2342 +END + +NUMBER F_ERSPSAN41 15 +BEGIN + PROMPT 41 14 "43 Er.spese sanitarie" + FIELD LF_QUAA->ERSPSAN + PICTURE "." + HELP "Erogazioni per spese sanitarie, anche in forma assicurativa" + GROUP G_ALL +END + +NUMBER F_PRASSVI42 15 +BEGIN + PROMPT 2 15 "44 Premi di assicurazione vita e infortuni " + FIELD LF_QUAA->PRASSVI + PICTURE "." + HELP "Premi di assicurazione vita e infortuni" + GROUP G_ALL +END + +NUMBER F_CONPRECO43 15 +BEGIN + PROMPT 2 16 "45 Contributi per previdenza complementare " + FIELD LF_QUAA->CONPRECO + PICTURE "." + HELP "Contributi per previdenza complementare" + GROUP G_ALL +END + +ENDPAGE + +PAGE "3" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 3 "@bArretrati relativi ad anni precedenti" +END + +NUMBER F_COBBDIP44 15 +BEGIN + PROMPT 2 4 "46 Cont.obb.carico dip." + FIELD LF_QUAA->COBBDIP2 + PICTURE "." + HELP "Contributi obbligatori a carico del dipendente" + GROUP G_ALL +END + +NUMBER F_AMMIMP45 15 +BEGIN + PROMPT 41 4 "47 Ammontare imponib." + FIELD LF_QUAA->AMMIMP + PICTURE "." + HELP "Ammontare imponibile" + GROUP G_ALL +END + +NUMBER F_DETIMPOS46 15 +BEGIN + PROMPT 2 5 "48 Detrazioni d'imposta" + FIELD LF_QUAA->DETIMPOS + PICTURE "." + GROUP G_ALL +END + +NUMBER F_RITESEG47 15 +BEGIN + PROMPT 41 5 "49 Ritenuta eseguita " + FIELD LF_QUAA->RITESEG + PICTURE "." + GROUP G_ALL +END + +NUMBER F_SVNASSRI48 15 +BEGIN + PROMPT 2 6 "50 Altre somme e valori non ass.a ritenuta " + FIELD LF_QUAA->SVNASSRI + PICTURE "." + GROUP G_ALL +END + +NUMBER F_AIFCSSN49 15 +BEGIN + PROMPT 2 7 "51 Ammontare imponibile ai fini del C.S.S.N." + FIELD LF_QUAA->AIFCSSN + PICTURE "." + HELP "Ammontare imponibile ai fini del C.S.S.N." + GROUP G_ALL +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 9 "@bVERSAMENTI E RIMBORSI CONSEGUENTI ALL'ASSISTENZA FISCALE " +END + +GROUPBOX DLG_NULL 0 3 +BEGIN + PROMPT 1 10 "@bAssistenza 1995" +END + +STRING F_CONEFF50 1 +BEGIN + PROMPT 2 11 "52 conguagli non effettuati nel 95 " + FIELD LF_QUAA->CONEFF + SHEET "Codice|Descrizione@60" + INPUT F_CONEFF50 + ITEM " |Niente" + ITEM "A|Cessazione del rapporto di lavoro" + ITEM "B|Aspettativa senza retribuzione" + ITEM "C|Decesso" + ITEM "D|Richiesta di minore secondo acconto" + ITEM "E|Retribuzione insufficiente" + ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" + OUTPUT F_CONEFF50 + FLAGS "U" + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 13 "@bSeconda rata acconto IRPEF 1995" +END + +NUMBER F_IMPVERS51 15 +BEGIN + PROMPT 2 14 "53 Imposta vers. " + FIELD LF_QUAA->IMPVERS + PICTURE "." + GROUP G_ALL +END + +NUMBER F_ISOPTAS52 15 +BEGIN + PROMPT 37 14 "54 Interessi " + FIELD LF_QUAA->INTERE + PICTURE "." + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 16 "@bSeconda rata acconto C.S.S.N. 1995" +END + +NUMBER F_CONTRVER53 15 +BEGIN + PROMPT 2 17 "55 Contr. versato" + FIELD LF_QUAA->CSSN95CV + PICTURE "." + GROUP G_ALL +END + +NUMBER F_ISOPTAS54 15 +BEGIN + PROMPT 37 17 "56 Interessi " + FIELD LF_QUAA->INTERE2 + PICTURE "." + GROUP G_ALL +END + +ENDPAGE + +PAGE "4" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 3 "@bAssistenza 1996" +END + +STRING F_CNEFF55 1 +BEGIN + PROMPT 2 4 "57 Conguagli n/eff. " + FIELD LF_QUAA->CNEFF + SHEET "Codice|Descrizione@85" + INPUT F_CNEFF55 + ITEM " |Niente" + ITEM "A|Cessazione del rapporto di lavoro" + ITEM "B|Aspettativa senza retribuzione" + ITEM "C|Decesso" + ITEM "D|Richiesta di minore secondo acconto" + ITEM "E|Retribuzione insufficiente" + ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" + ITEM "G|Rimborso non effettuato o rimborso effettuato parzialm..." + OUTPUT F_CNEFF55 + FLAGS "U" + GROUP G_ALL +END + +STRING F_RETCON56 1 +BEGIN + PROMPT 37 4 "58 Rettifica conguaglio " + FIELD LF_QUAA->RETCON + SHEET "Cod.|Descrizione@60" + INPUT F_RETCON56 + ITEM " | " + ITEM "A|Rettifica importi da conguagliare... (I num. d'ordine)" + ITEM "B|Rettifica importi da conguagliare... (II num. d'ordine)" + ITEM "C|Cong. a seguito rett. prec. comunicaz. tardivam. perven..." + ITEM "D|Cong. a seguito rett. prec. comunicaz. tempestivam. perven..." + ITEM "E|Cong. tardivo per mod.730-4 pervenuto tardivamente" + ITEM "F|Cong. tardivo per causa dipendente dal sostituto d'imposta" + OUTPUT F_RETCON56 + FLAGS "U" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 6 "@bSaldo IRPEF per il 1995" +END + +NUMBER F_IMPRIMB57 15 +BEGIN + PROMPT 2 7 "59 Impo. rimborsata " + FIELD LF_QUAA->IMPRIMB + PICTURE "." + GROUP G_ALL +END + +NUMBER F_IMPVER58 15 +BEGIN + PROMPT 44 7 "60 Imposta versata" + FIELD LF_QUAA->IMPVER + PICTURE "." + GROUP G_ALL +END + +NUMBER F_INTIRPEF59 15 +BEGIN + PROMPT 2 8 "61 Interessi " + FIELD LF_QUAA->INTIRPEF + PICTURE "." + HELP "Interessi IRPEF" + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 10 "@bPrima rata acconto IRPEF per il 1996" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "62 Impo. versata " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "62 I.ver/tr.IRPEF" + GROUP G_730 +END + +NUMBER F_IMPVER60 15 +BEGIN + PROMPT 23 11 "" + FIELD LF_QUAA->IMPVER2 + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 11 "63 Interessi " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 11 "63 I.ri.IRPEF" + GROUP G_730 +END + +NUMBER F_INTER61 15 +BEGIN + PROMPT 61 11 "" + FIELD LF_QUAA->INTER + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 12 "64 Soprattasse saldo IRPEF per 95 e prima rata acconto 96 " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 12 "64 Prima rata di acconto IRPEF per il 1996 " + GROUP G_730 +END + +NUMBER F_STSIRPEF62 15 +BEGIN + PROMPT 61 12 "" + FIELD LF_QUAA->STSIRPEF + PICTURE "." + HELP "Interessi IRPEF" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 14 "@bSaldo C.S.S.N. per il 1995" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 15 "65 Contr. rimborso " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 15 "65 2rata ac.IRPEF96" + GROUP G_730 +END + +NUMBER F_CONRIMB63 15 +BEGIN + PROMPT 21 15 "" + FIELD LF_QUAA->CONRIMB + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 15 "66 Contr.versato " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 15 "66 I.v.trat.CSSN " + GROUP G_730 +END + +NUMBER F_CONVER64 15 +BEGIN + PROMPT 61 15 "" + FIELD LF_QUAA->CONVER + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 16 "67 Interessi " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 16 "67 Imp. rimb. CSSN " + GROUP G_730 +END + +NUMBER F_INTER65 15 +BEGIN +// "Interessi " + PROMPT 21 16 "" + FIELD LF_QUAA->INTER2 + PICTURE "." +END + +ENDPAGE + +PAGE "5" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 3 "@bPrima rata acconto C.S.S.N. per il 1996" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 4 "68 Contr. versato " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 4 "68 1r.acc.CSSN 96 " + GROUP G_730 +END + +NUMBER F_CONVER66 15 +BEGIN +// "Contributo versato " + PROMPT 21 4 "" + FIELD LF_QUAA->CONVER2 + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 4 "69 Interessi " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 44 4 "69 2r.acc.CSSN 96" + GROUP G_730 +END + +NUMBER F_INTER67 15 +BEGIN +// "69 Interessi " + PROMPT 61 4 "" + FIELD LF_QUAA->INTER3 + PICTURE "." +END + +NUMBER F_STSCSSN68 15 +BEGIN + PROMPT 2 5 "70 Soprattasse saldo C.S.S.N. 95 e prima rata acconto 96 " + FIELD LF_QUAA->STSCSSN70 + GROUP G_ALL + PICTURE "." +END + +NUMBER F_SEGDICNL69 2 +BEGIN + PROMPT 2 6 "71 Mod.730/96 non liquidabile " + FIELD LF_QUAA->M730NLIQ + FLAGS "Z" + SHEET "Codice|Descrizione@60" + INPUT F_SEGDICNL69 + ITEM " |Niente" + ITEM "01|Errata o incomp. compilaz. dati anagr. e di res. del dich." + ITEM "02|Errata o incomp. compilaz. dati del coniuge e fam. a carico" + ITEM "03|Errata o incomp. compilaz. dati anagr. e di res. del coniuge" + ITEM "04|Errata o incomp. dichiaraz. q. A Mod.730/96 del dich." + ITEM "05|Errata o incomp. dichiaraz. q. A Mod.730/96 del coniuge" + ITEM "06|Errata o incomp. dichiaraz. q. B Mod.730/96 del dich." + ITEM "07|Errata o incomp. dichiaraz. q. B Mod.730/96 del coniuge" + ITEM "08|Errata o incomp. dichiaraz. q. C Mod.730/96 del dich." + ITEM "09|Errata o incomp. dichiaraz. q. D Mod.730/96 del dich." + ITEM "10|Errata o incomp. dichiaraz. q. E Mod.730/96 del dich." + ITEM "11|Errata o incomp. dichiaraz. q. E Mod.730/96 del coniuge" + ITEM "12|Errata o incomp. dichiaraz. q. F Mod.730/96 del dich." + ITEM "13|Errata o incomp. dichiaraz. q. F Mod.730/96 del coniuge" + OUTPUT F_SEGDICNL69 + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 10 "@bDati identificativi del C.A.A.F che ha prestato assistenza " +END + +NUMBER F_CODCAAF 5 +BEGIN + PROMPT 2 11 "Codice " + FIELD LF_QUAA->CODCAAF + USE %CAF + CHECKTYPE NORMAL + INPUT CODTAB F_CODCAAF + DISPLAY "Codice" CODTAB + DISPLAY "Denominazione@50" S0 + DISPLAY "N.ro iscrizione" I1 + DISPLAY "Codice fiscale@16" S1 + OUTPUT F_CODCAAF CODTAB + OUTPUT F_DENCAAF S0 + OUTPUT F_NISCRA I1 + OUTPUT F_CODFISCAAF S1 + GROUP G_ALL + FLAGS "Z" +END + +STRING F_DENCAAF 50 +BEGIN + PROMPT 26 11 "" + FLAGS "DU" +END + +STRING F_CODFISCAAF 16 +BEGIN + PROMPT 2 12 "72 Cod.fiscale " + FLAGS "D" +END + +NUMBER F_NISCRA 5 +BEGIN + PROMPT 50 12 "74 N.iscrizione albo " + FLAGS "D" +END + +ENDPAGE + +ENDMASK diff --git a/m770/771200d.uml b/m770/771200d.uml index f8f11ef3f..a9967d92d 100755 --- a/m770/771200d.uml +++ b/m770/771200d.uml @@ -1,300 +1,301 @@ -#include "771200.h" -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE - -PAGE "1" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER QAF_CODDITTA 5 -BEGIN - PROMPT 80 80 "" - FLAGS "D" - FIELD LF_QUAA1->CODDITTA - KEY 1 -END - -NUMBER F_CODIP 6 -BEGIN - PROMPT 17 1 "" - USE LF_DIPEND KEY 1 - FIELD LF_QUAA1->CODDIP - INPUT CODDITTA QAF_CODDITTA - INPUT CODDIP F_CODIP - DISPLAY "Cognome@24" COGNOME - DISPLAY "Nome@20" NOME - OUTPUT QAF_COGNOME COGNOME - OUTPUT QAF_NOME NOME - CHECKTYPE REQUIRED - FLAGS "DG" - MESSAGE COPY,2@ - KEY 1 -END - -STRING QAF_COGNOME 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - MESSAGE COPY,3@ -END - -STRING QAF_NOME 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - MESSAGE COPY,4@ -END - -NUMBER QAF_NPROG 4 -BEGIN - PROMPT 72 1 "" - FIELD LF_QUAA1->NPROG - FLAGS "DG" - KEY 1 - MESSAGE COPY,5@ -END - -LISTBOX F_MESEANNO 9 -BEGIN - PROMPT 2 3 "8 Periodo di riferimento " - FLAGS "M" - FIELD LF_QUAA1->MESERIF -END - -NUMBER QA1F_ANNORIF 4 -BEGIN - PROMPT 44 3 "" - FLAGS "D" - FIELD LF_QUAA1->ANNORIF -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 4 "@bSaldo IRPEF per il 1994" -END - -NUMBER F_IMPRIMB9 15 -BEGIN - PROMPT 2 5 "9 Imposta rimbors. " - FIELD LF_QUAA1->IMPRIMB9 - PICTURE "." -END - -NUMBER F_IMPVERS10 15 -BEGIN - PROMPT 45 5 "10 Imposta ver. " - FIELD LF_QUAA1->IMPVERS10 - PICTURE "." -END - -NUMBER F_INTER11 15 -BEGIN - PROMPT 2 6 "11 Interessi " - FIELD LF_QUAA1->INTER11 - PICTURE "." -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 8 "@bPrima rata acconto IRPEF per il 1995" -END - -NUMBER F_IMPVERS12 15 -BEGIN - PROMPT 2 9 "12 Imposta versata " - FIELD LF_QUAA1->IMPVERS12 - PICTURE "." -END - -NUMBER F_INTER13 15 -BEGIN - PROMPT 45 9 "13 Interessi " - FIELD LF_QUAA1->INTER13 - PICTURE "." -END - -NUMBER F_STASSA14 15 -BEGIN - PROMPT 2 10 "14 Soprattassa su IRPEF saldo 94 e prima rata acconto 95 " - FIELD LF_QUAA1->STASSA14 - PICTURE "." -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 12 "@bSaldo C.S.S.N. per il 1994" -END - -NUMBER F_CONTRIMB15 15 -BEGIN - PROMPT 2 13 "15 Cont. a rimborso" - FIELD LF_QUAA1->CONTRIMB15 - PICTURE "." - HELP "Contributo a rimborso" -END - -NUMBER F_CONTVERS16 15 -BEGIN - PROMPT 45 13 "16 Cont.versato " - FIELD LF_QUAA1->CONTVERS16 - PICTURE "." - HELP "Contributo versato" -END - -NUMBER F_INTER17 15 -BEGIN - PROMPT 2 14 "17 Interessi " - FIELD LF_QUAA1->INTER17 - PICTURE "." -END - -ENDPAGE - -PAGE "2" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 3 "@bPrima rata acconto C.S.S.N. per il 1995" -END - -NUMBER F_CONTVER18 15 -BEGIN - PROMPT 2 4 "18 Contributo vers." - FIELD LF_QUAA1->CONTVER18 - PICTURE "." -END - -NUMBER F_INTER19 15 -BEGIN - PROMPT 45 4 "19 Interessi " - FIELD LF_QUAA1->INTER19 - PICTURE "." -END - -NUMBER F_STASSA20 15 -BEGIN - PROMPT 2 5 "20 Soprattassa su C.S.S.N. saldo 94 e prima rata acconto 95" - FIELD LF_QUAA1->STASSA20 - PICTURE "." -END - -STRING F_CONNEFF21 1 -BEGIN - PROMPT 2 6 "21 Cong. n/effet. " - FIELD LF_QUAA1->CONNEFF21 - HELP "Conguagli non effettuati" - SHEET "Codice|Descrizione@60" - INPUT F_CONNEFF21 - ITEM " |Niente" - ITEM "A|Cessazione del rapporto di lavoro" - ITEM "B|Aspettativa senza retribuzione" - ITEM "C|Decesso" - ITEM "D|Richiesta di minore secondo acconto" - ITEM "E|Retribuzione insufficiente" - ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" - ITEM "G|Rimborso non effettuato o rimborso effettuato parzialmente" - OUTPUT F_CONNEFF21 - FLAGS "U" -END - -STRING F_TIPOCONG22 1 -BEGIN - PROMPT 45 6 "22 Tipo cong. " - FIELD LF_QUAA1->TIPOCONG22 - SHEET "Codice|Descrizione@60" - INPUT F_TIPOCONG22 - ITEM " |Niente" - ITEM "R|Cong. tardivo derivante da Mod.730/93 rettificativo..." - ITEM "S|Cong. tardivo derivante da comunicaz. Mod.730/94..." - ITEM "T|Cong. tardivo deriv. da Mod.730/93 ov. comunic. tardiva Mod.730/94" - ITEM "U|Cong. conseguente ad incapienza della retribuz..." - OUTPUT F_TIPOCONG22 - FLAGS "U" -END - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 9 "@bDati identificativi del C.A.A.F che ha prestato assistenza " -END - -NUMBER F_CODCAAF 5 -BEGIN - PROMPT 2 10 "Codice " - FIELD LF_QUAA1->CODCAAF - USE %CAF - CHECKTYPE NORMAL - INPUT CODTAB F_CODCAAF - DISPLAY "Codice" CODTAB - DISPLAY "Denominazione@50" S0 - DISPLAY "N.ro iscrizione" I1 - DISPLAY "Codice fiscale@16" S1 - OUTPUT F_CODCAAF CODTAB - OUTPUT F_DENCAAF S0 - OUTPUT F_NISCRA I1 - OUTPUT F_CODFISCAAF S1 -END - -STRING F_DENCAAF 50 -BEGIN - PROMPT 26 10 "" - FLAGS "DU" -END - -STRING F_CODFISCAAF 16 -BEGIN - PROMPT 2 11 "23 Cod.fiscale " - FLAGS "D" -END - -NUMBER F_NISCRA 5 -BEGIN - PROMPT 50 11 "25 N.iscrizione albo " - FLAGS "D" -END - -DATE F_DATARIC29 -BEGIN - PROMPT 2 12 "26 Data ricezione Modello 730-5 " - FIELD LF_QUAA1->DATARIC26 -END - -ENDPAGE - +#include "771200.h" +TOOLBAR "" 0 20 0 2 +#include +ENDPAGE + +PAGE "1" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER QAF_CODDITTA 5 +BEGIN + PROMPT 80 80 "" + FLAGS "D" + FIELD LF_QUAA1->CODDITTA + KEY 1 +END + +NUMBER F_CODIP 6 +BEGIN + PROMPT 17 1 "" + USE LF_DIPEND KEY 1 + FIELD LF_QUAA1->CODDIP + INPUT CODDITTA QAF_CODDITTA + INPUT CODDIP F_CODIP + DISPLAY "Cognome@24" COGNOME + DISPLAY "Nome@20" NOME + OUTPUT QAF_COGNOME COGNOME + OUTPUT QAF_NOME NOME + CHECKTYPE REQUIRED + FLAGS "DG" + MESSAGE COPY,2@ + KEY 1 +END + +STRING QAF_COGNOME 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + MESSAGE COPY,3@ +END + +STRING QAF_NOME 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + MESSAGE COPY,4@ +END + +NUMBER QAF_NPROG 4 +BEGIN + PROMPT 72 1 "" + FIELD LF_QUAA1->NPROG + FLAGS "DG" + KEY 1 + MESSAGE COPY,5@ +END + +LISTBOX F_MESEANNO 9 +BEGIN + PROMPT 2 3 "8 Periodo di riferimento " + FLAGS "M" + FIELD LF_QUAA1->MESERIF +END + +NUMBER QA1F_ANNORIF 4 +BEGIN + PROMPT 44 3 "" + FLAGS "D" + FIELD LF_QUAA1->ANNORIF +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 4 "@bSaldo IRPEF per il 1994" +END + +NUMBER F_IMPRIMB9 15 +BEGIN + PROMPT 2 5 "9 Imposta rimbors. " + FIELD LF_QUAA1->IMPRIMB9 + PICTURE "." +END + +NUMBER F_IMPVERS10 15 +BEGIN + PROMPT 45 5 "10 Imposta ver. " + FIELD LF_QUAA1->IMPVERS10 + PICTURE "." +END + +NUMBER F_INTER11 15 +BEGIN + PROMPT 2 6 "11 Interessi " + FIELD LF_QUAA1->INTER11 + PICTURE "." +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 8 "@bPrima rata acconto IRPEF per il 1995" +END + +NUMBER F_IMPVERS12 15 +BEGIN + PROMPT 2 9 "12 Imposta versata " + FIELD LF_QUAA1->IMPVERS12 + PICTURE "." +END + +NUMBER F_INTER13 15 +BEGIN + PROMPT 45 9 "13 Interessi " + FIELD LF_QUAA1->INTER13 + PICTURE "." +END + +NUMBER F_STASSA14 15 +BEGIN + PROMPT 2 10 "14 Soprattassa su IRPEF saldo 94 e prima rata acconto 95 " + FIELD LF_QUAA1->STASSA14 + PICTURE "." +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 12 "@bSaldo C.S.S.N. per il 1994" +END + +NUMBER F_CONTRIMB15 15 +BEGIN + PROMPT 2 13 "15 Cont. a rimborso" + FIELD LF_QUAA1->CONTRIMB15 + PICTURE "." + HELP "Contributo a rimborso" +END + +NUMBER F_CONTVERS16 15 +BEGIN + PROMPT 45 13 "16 Cont.versato " + FIELD LF_QUAA1->CONTVERS16 + PICTURE "." + HELP "Contributo versato" +END + +NUMBER F_INTER17 15 +BEGIN + PROMPT 2 14 "17 Interessi " + FIELD LF_QUAA1->INTER17 + PICTURE "." +END + +ENDPAGE + +PAGE "2" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 3 "@bPrima rata acconto C.S.S.N. per il 1995" +END + +NUMBER F_CONTVER18 15 +BEGIN + PROMPT 2 4 "18 Contributo vers." + FIELD LF_QUAA1->CONTVER18 + PICTURE "." +END + +NUMBER F_INTER19 15 +BEGIN + PROMPT 45 4 "19 Interessi " + FIELD LF_QUAA1->INTER19 + PICTURE "." +END + +NUMBER F_STASSA20 15 +BEGIN + PROMPT 2 5 "20 Soprattassa su C.S.S.N. saldo 94 e prima rata acconto 95" + FIELD LF_QUAA1->STASSA20 + PICTURE "." +END + +STRING F_CONNEFF21 1 +BEGIN + PROMPT 2 6 "21 Cong. n/effet. " + FIELD LF_QUAA1->CONNEFF21 + HELP "Conguagli non effettuati" + SHEET "Codice|Descrizione@60" + INPUT F_CONNEFF21 + ITEM " |Niente" + ITEM "A|Cessazione del rapporto di lavoro" + ITEM "B|Aspettativa senza retribuzione" + ITEM "C|Decesso" + ITEM "D|Richiesta di minore secondo acconto" + ITEM "E|Retribuzione insufficiente" + ITEM "F|Situaz. per le quali dovrebbero essere indicati piu' codici" + ITEM "G|Rimborso non effettuato o rimborso effettuato parzialmente" + OUTPUT F_CONNEFF21 + FLAGS "U" +END + +STRING F_TIPOCONG22 1 +BEGIN + PROMPT 45 6 "22 Tipo cong. " + FIELD LF_QUAA1->TIPOCONG22 + SHEET "Codice|Descrizione@60" + INPUT F_TIPOCONG22 + ITEM " |Niente" + ITEM "R|Cong. tardivo derivante da Mod.730/93 rettificativo..." + ITEM "S|Cong. tardivo derivante da comunicaz. Mod.730/94..." + ITEM "T|Cong. tardivo deriv. da Mod.730/93 ov. comunic. tardiva Mod.730/94" + ITEM "U|Cong. conseguente ad incapienza della retribuz..." + OUTPUT F_TIPOCONG22 + FLAGS "U" +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 9 "@bDati identificativi del C.A.A.F che ha prestato assistenza " +END + +NUMBER F_CODCAAF 5 +BEGIN + PROMPT 2 10 "Codice " + FIELD LF_QUAA1->CODCAAF + USE %CAF + CHECKTYPE NORMAL + INPUT CODTAB F_CODCAAF + DISPLAY "Codice" CODTAB + DISPLAY "Denominazione@50" S0 + DISPLAY "N.ro iscrizione" I1 + DISPLAY "Codice fiscale@16" S1 + OUTPUT F_CODCAAF CODTAB + OUTPUT F_DENCAAF S0 + OUTPUT F_NISCRA I1 + OUTPUT F_CODFISCAAF S1 + FLAGS "Z" +END + +STRING F_DENCAAF 50 +BEGIN + PROMPT 26 10 "" + FLAGS "DU" +END + +STRING F_CODFISCAAF 16 +BEGIN + PROMPT 2 11 "23 Cod.fiscale " + FLAGS "D" +END + +NUMBER F_NISCRA 5 +BEGIN + PROMPT 50 11 "25 N.iscrizione albo " + FLAGS "D" +END + +DATE F_DATARIC29 +BEGIN + PROMPT 2 12 "26 Data ricezione Modello 730-5 " + FIELD LF_QUAA1->DATARIC26 +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/m770/771200f.uml b/m770/771200f.uml index 634c6c3ec..e5eb2abb5 100755 --- a/m770/771200f.uml +++ b/m770/771200f.uml @@ -1,410 +1,411 @@ -#include "771200.h" -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE - -PAGE "1" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER QAF_CODDITTA 5 -BEGIN - PROMPT 80 80 "" - FLAGS "D" - FIELD LF_QUAA2->CODDITTA - KEY 1 -END - -NUMBER F_CODIP 6 -BEGIN - PROMPT 17 1 "" - USE LF_DIPEND KEY 1 - FIELD LF_QUAA2->CODDIP - INPUT CODDITTA QAF_CODDITTA - INPUT CODDIP F_CODIP - DISPLAY "Cognome@24" COGNOME - DISPLAY "Nome@20" NOME - OUTPUT QAF_COGNOME COGNOME - OUTPUT QAF_NOME NOME - CHECKTYPE REQUIRED - FLAGS "DG" - MESSAGE COPY,2@ - KEY 1 -END - -STRING QAF_COGNOME 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - MESSAGE COPY,3@ -END - -STRING QAF_NOME 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - MESSAGE COPY,4@ -END - -NUMBER QAF_NPROG 4 -BEGIN - PROMPT 72 1 "" - FIELD LF_QUAA2->NPROG - FLAGS "DG" - KEY 1 - MESSAGE COPY,5@ -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 3 "@bASSISTENZA 1995 " -END - -STRING QA2F_CNEFF 1 -BEGIN - PROMPT 2 4 "8 Conguagli non effettuati " - FIELD LF_QUAA2->CONEFF - FLAGS "U" - HELP "Conguagli non effettuati relativi all'assistenza 1995" - SHEET "Codice|Descrizione@60" - INPUT QA2F_CNEFF - ITEM " |Niente" - ITEM "A|Cessazione del rapporto di lavoro" - ITEM "B|Decesso" - ITEM "C|Richiesta di minore secondo acconto" - ITEM "D|Retribuzione insufficiente" - ITEM "E|Situaz. per le quali dovrebbero essere indicati piu' codici" - ITEM "F|Rimborso non effettuato o rimborso effettuato parzialmente" - OUTPUT QA2F_CNEFF - GROUP G_ALL -END - -STRING QA2F_RETCON 1 -BEGIN - PROMPT 38 4 "9 Rettifica conguaglio " - FIELD LF_QUAA2->RETCON - SHEET "Codice|Descrizione@60" - INPUT QA2F_RETCON - ITEM " | " - ITEM "A|Rettifica importi da conguagliare... (I num. d'ordine)" - ITEM "B|Rettifica importi da conguagliare... (II num. d'ordine)" - ITEM "C|Conguaglio tardivamente effettuato nel mese di luglio" - OUTPUT QA2F_RETCON - FLAGS "U" -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 6 "@bSALDO IRPEF PER IL 1994 " -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 7 "10 Imp.ver/tr.IRPEF" - GROUP G_730 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 7 "10 Imposta rimbor. " - GROUP G_770 -END - -NUMBER F_IIRPEFVER8 15 -BEGIN - PROMPT 21 7 "" - FIELD LF_QUAA2->SIRPEFRIMB - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 7 "11 Imp.da rim.IRPEF" - GROUP G_730 -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 7 "11 Imposta versata " - GROUP G_770 -END - -NUMBER F_IIRPEFRI9 15 -BEGIN - PROMPT 61 7 "" - FIELD LF_QUAA2->VIRPEF - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 8 "12 Interessi " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 8 "12 1rata ac.IRPEF95" - GROUP G_730 -END - -NUMBER F_INTER11 15 -BEGIN - PROMPT 21 8 "" - FIELD LF_QUAA2->INTIRPEF - PICTURE "." -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 10 "@bPRIMA RATA ACCONTO IRPEF PER IL 1995 " -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 11 "13 Imposta versata " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 11 "13 2rata ac.IRPEF95" - GROUP G_730 -END - -NUMBER F_PRIRPEF10 15 -BEGIN -// PROMPT 2 11 "Imposta versata " - PROMPT 21 11 "" - FIELD LF_QUAA2->AIRPEFIV - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 11 "14 Interessi " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 11 "14 I.v.trat.CSSN " - GROUP G_730 -END - -NUMBER F_AIRPEFINT 15 -BEGIN - PROMPT 61 11 "" - FIELD LF_QUAA2->AIRPEFINT - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 13 "15 Soprattasse IRPEF saldo 94 e prima rata acc.95 " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 13 "15 Importo da rimborsare CSSN " - GROUP G_730 -END - -NUMBER F_STASSA12 15 -BEGIN - PROMPT 61 13 "" - FIELD LF_QUAA2->STASSA15 - PICTURE "." -END - -ENDPAGE - -PAGE "2" -1 -1 78 21 - -TEXT DLG_NULL -BEGIN - PROMPT 1 1 "@bDipendente" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 17 1 "" - FLAGS "DG" - GROUP 2 -END - -STRING DLG_NULL 24 -BEGIN - PROMPT 25 1 "" - FLAGS "DG" - GROUP 3 -END - -STRING DLG_NULL 20 -BEGIN - PROMPT 49 1 "" - FLAGS "DG" - GROUP 4 -END - -NUMBER DLG_NULL 4 -BEGIN - PROMPT 72 1 "" - FLAGS "DG" - GROUP 5 -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 4 "@bSALDO C.S.S.N. PER IL 1994 " -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 5 "16 Cont.a rimborso " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 5 "16 1r.acc.CSSN 95 " - GROUP G_730 -END - -NUMBER QA2F_CSSNCRIMB 15 -BEGIN - PROMPT 21 5 "" - FIELD LF_QUAA2->CONTR16 - PICTURE "." -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 5 "17 Cont. versato " - GROUP G_770 -END - -TEXT DLG_NULL -BEGIN - PROMPT 41 5 "17 2r.acc.CSSN 95 " - GROUP G_730 -END - -NUMBER QA2F_CSSNCVER 15 -BEGIN -// PROMPT 41 5 "Contr. versato " - PROMPT 61 5 "" - FIELD LF_QUAA2->CONTRVER - PICTURE "." -END - -NUMBER QA2F_CSSNINT 15 -BEGIN - PROMPT 2 6 "18 Interessi " - FIELD LF_QUAA2->INTER18 - PICTURE "." - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 8 "@bPRIMA RATA ACCONTO C.S.S.N. PER IL 1995 " -END - -NUMBER QA2F_CSSNAIV 15 -BEGIN - PROMPT 2 9 "19 Contrib.versato " - FIELD LF_QUAA2->CONTV19 - PICTURE "." - GROUP G_ALL -END - -NUMBER QA2F_CSSNAINT 15 -BEGIN - PROMPT 41 9 "20 Interessi " - FIELD LF_QUAA2->INTE20 - PICTURE "." - GROUP G_ALL -END - -NUMBER QA2F_STCSSN 15 -BEGIN - PROMPT 2 11 "21 Soprattasse su C.S.S.N. saldo 94 e prima rata acc.95 " - FIELD LF_QUAA2->SOPRAT21 - PICTURE "." - GROUP G_ALL -END - -STRING QA2F_730NLIQ 2 -BEGIN - PROMPT 2 12 "22 Mod.730/95 non liquidabile " - SHEET "Codice|Descrizione@60" - INPUT QA2F_730NLIQ - ITEM "|" - ITEM "01|Errata o incomp. compilaz. dati anagr. e di res. del dich." - ITEM "02|Errata o incomp. compilaz. dati del coniuge e fam. a carico" - ITEM "03|Errata o incomp. compilaz. dati anagr. e di res. del coniuge" - ITEM "04|Errata o incomp. dichiaraz. q. A Mod.730/95 del dich." - ITEM "05|Errata o incomp. dichiaraz. q. A Mod.730/95 del coniuge" - ITEM "06|Errata o incomp. dichiaraz. q. B Mod.730/95 del dich." - ITEM "07|Errata o incomp. dichiaraz. q. B Mod.730/95 del coniuge" - ITEM "08|Errata o incomp. dichiaraz. q. C Mod.730/95 del dich." - ITEM "09|Errata o incomp. dichiaraz. q. D Mod.730/95 del dich." - ITEM "10|Errata o incomp. dichiaraz. q. E Mod.730/95 del dich." - ITEM "11|Errata o incomp. dichiaraz. q. E Mod.730/95 del coniuge" - ITEM "12|Errata o incomp. dichiaraz. q. F Mod.730/95 del dich." - ITEM "13|Errata o incomp. dichiaraz. q. F Mod.730/95 del coniuge" - FIELD LF_QUAA2->M730NLIQ - FLAGS "Z" - OUTPUT QA2F_730NLIQ - GROUP G_ALL -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 14 "@bDati identificativi del C.A.A.F che ha prestato assistenza " -END - -NUMBER F_CODCAAF 5 -BEGIN - PROMPT 2 15 "Codice " - FIELD LF_QUAA2->CODCAAF - USE %CAF - CHECKTYPE NORMAL - INPUT CODTAB F_CODCAAF - DISPLAY "Codice" CODTAB - DISPLAY "Denominazione@50" S0 - DISPLAY "N.ro iscrizione" I1 - DISPLAY "Codice fiscale@16" S1 - OUTPUT F_CODCAAF CODTAB - OUTPUT F_DENCAAF S0 - OUTPUT F_NISCRA I1 - OUTPUT F_CODFISCAAF S1 - GROUP G_ALL -END - -STRING F_DENCAAF 50 -BEGIN - PROMPT 26 15 "" - FLAGS "DU" -END - -STRING F_CODFISCAAF 16 -BEGIN - PROMPT 2 16 "23 Cod.fiscale " - FLAGS "D" -END - -NUMBER F_NISCRA 5 -BEGIN - PROMPT 50 16 "25 N.iscrizione albo " - FLAGS "D" -END - -ENDPAGE - +#include "771200.h" +TOOLBAR "" 0 20 0 2 +#include +ENDPAGE + +PAGE "1" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER QAF_CODDITTA 5 +BEGIN + PROMPT 80 80 "" + FLAGS "D" + FIELD LF_QUAA2->CODDITTA + KEY 1 +END + +NUMBER F_CODIP 6 +BEGIN + PROMPT 17 1 "" + USE LF_DIPEND KEY 1 + FIELD LF_QUAA2->CODDIP + INPUT CODDITTA QAF_CODDITTA + INPUT CODDIP F_CODIP + DISPLAY "Cognome@24" COGNOME + DISPLAY "Nome@20" NOME + OUTPUT QAF_COGNOME COGNOME + OUTPUT QAF_NOME NOME + CHECKTYPE REQUIRED + FLAGS "DG" + MESSAGE COPY,2@ + KEY 1 +END + +STRING QAF_COGNOME 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + MESSAGE COPY,3@ +END + +STRING QAF_NOME 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + MESSAGE COPY,4@ +END + +NUMBER QAF_NPROG 4 +BEGIN + PROMPT 72 1 "" + FIELD LF_QUAA2->NPROG + FLAGS "DG" + KEY 1 + MESSAGE COPY,5@ +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 3 "@bASSISTENZA 1995 " +END + +STRING QA2F_CNEFF 1 +BEGIN + PROMPT 2 4 "8 Conguagli non effettuati " + FIELD LF_QUAA2->CONEFF + FLAGS "U" + HELP "Conguagli non effettuati relativi all'assistenza 1995" + SHEET "Codice|Descrizione@60" + INPUT QA2F_CNEFF + ITEM " |Niente" + ITEM "A|Cessazione del rapporto di lavoro" + ITEM "B|Decesso" + ITEM "C|Richiesta di minore secondo acconto" + ITEM "D|Retribuzione insufficiente" + ITEM "E|Situaz. per le quali dovrebbero essere indicati piu' codici" + ITEM "F|Rimborso non effettuato o rimborso effettuato parzialmente" + OUTPUT QA2F_CNEFF + GROUP G_ALL +END + +STRING QA2F_RETCON 1 +BEGIN + PROMPT 38 4 "9 Rettifica conguaglio " + FIELD LF_QUAA2->RETCON + SHEET "Codice|Descrizione@60" + INPUT QA2F_RETCON + ITEM " | " + ITEM "A|Rettifica importi da conguagliare... (I num. d'ordine)" + ITEM "B|Rettifica importi da conguagliare... (II num. d'ordine)" + ITEM "C|Conguaglio tardivamente effettuato nel mese di luglio" + OUTPUT QA2F_RETCON + FLAGS "U" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 6 "@bSALDO IRPEF PER IL 1994 " +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 7 "10 Imp.ver/tr.IRPEF" + GROUP G_730 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 7 "10 Imposta rimbor. " + GROUP G_770 +END + +NUMBER F_IIRPEFVER8 15 +BEGIN + PROMPT 21 7 "" + FIELD LF_QUAA2->SIRPEFRIMB + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 7 "11 Imp.da rim.IRPEF" + GROUP G_730 +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 7 "11 Imposta versata " + GROUP G_770 +END + +NUMBER F_IIRPEFRI9 15 +BEGIN + PROMPT 61 7 "" + FIELD LF_QUAA2->VIRPEF + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 8 "12 Interessi " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 8 "12 1rata ac.IRPEF95" + GROUP G_730 +END + +NUMBER F_INTER11 15 +BEGIN + PROMPT 21 8 "" + FIELD LF_QUAA2->INTIRPEF + PICTURE "." +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 10 "@bPRIMA RATA ACCONTO IRPEF PER IL 1995 " +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "13 Imposta versata " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "13 2rata ac.IRPEF95" + GROUP G_730 +END + +NUMBER F_PRIRPEF10 15 +BEGIN +// PROMPT 2 11 "Imposta versata " + PROMPT 21 11 "" + FIELD LF_QUAA2->AIRPEFIV + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 11 "14 Interessi " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 11 "14 I.v.trat.CSSN " + GROUP G_730 +END + +NUMBER F_AIRPEFINT 15 +BEGIN + PROMPT 61 11 "" + FIELD LF_QUAA2->AIRPEFINT + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 13 "15 Soprattasse IRPEF saldo 94 e prima rata acc.95 " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 13 "15 Importo da rimborsare CSSN " + GROUP G_730 +END + +NUMBER F_STASSA12 15 +BEGIN + PROMPT 61 13 "" + FIELD LF_QUAA2->STASSA15 + PICTURE "." +END + +ENDPAGE + +PAGE "2" -1 -1 78 21 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "@bDipendente" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 17 1 "" + FLAGS "DG" + GROUP 2 +END + +STRING DLG_NULL 24 +BEGIN + PROMPT 25 1 "" + FLAGS "DG" + GROUP 3 +END + +STRING DLG_NULL 20 +BEGIN + PROMPT 49 1 "" + FLAGS "DG" + GROUP 4 +END + +NUMBER DLG_NULL 4 +BEGIN + PROMPT 72 1 "" + FLAGS "DG" + GROUP 5 +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 4 "@bSALDO C.S.S.N. PER IL 1994 " +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 5 "16 Cont.a rimborso " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 5 "16 1r.acc.CSSN 95 " + GROUP G_730 +END + +NUMBER QA2F_CSSNCRIMB 15 +BEGIN + PROMPT 21 5 "" + FIELD LF_QUAA2->CONTR16 + PICTURE "." +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 5 "17 Cont. versato " + GROUP G_770 +END + +TEXT DLG_NULL +BEGIN + PROMPT 41 5 "17 2r.acc.CSSN 95 " + GROUP G_730 +END + +NUMBER QA2F_CSSNCVER 15 +BEGIN +// PROMPT 41 5 "Contr. versato " + PROMPT 61 5 "" + FIELD LF_QUAA2->CONTRVER + PICTURE "." +END + +NUMBER QA2F_CSSNINT 15 +BEGIN + PROMPT 2 6 "18 Interessi " + FIELD LF_QUAA2->INTER18 + PICTURE "." + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 8 "@bPRIMA RATA ACCONTO C.S.S.N. PER IL 1995 " +END + +NUMBER QA2F_CSSNAIV 15 +BEGIN + PROMPT 2 9 "19 Contrib.versato " + FIELD LF_QUAA2->CONTV19 + PICTURE "." + GROUP G_ALL +END + +NUMBER QA2F_CSSNAINT 15 +BEGIN + PROMPT 41 9 "20 Interessi " + FIELD LF_QUAA2->INTE20 + PICTURE "." + GROUP G_ALL +END + +NUMBER QA2F_STCSSN 15 +BEGIN + PROMPT 2 11 "21 Soprattasse su C.S.S.N. saldo 94 e prima rata acc.95 " + FIELD LF_QUAA2->SOPRAT21 + PICTURE "." + GROUP G_ALL +END + +STRING QA2F_730NLIQ 2 +BEGIN + PROMPT 2 12 "22 Mod.730/95 non liquidabile " + SHEET "Codice|Descrizione@60" + INPUT QA2F_730NLIQ + ITEM "|" + ITEM "01|Errata o incomp. compilaz. dati anagr. e di res. del dich." + ITEM "02|Errata o incomp. compilaz. dati del coniuge e fam. a carico" + ITEM "03|Errata o incomp. compilaz. dati anagr. e di res. del coniuge" + ITEM "04|Errata o incomp. dichiaraz. q. A Mod.730/95 del dich." + ITEM "05|Errata o incomp. dichiaraz. q. A Mod.730/95 del coniuge" + ITEM "06|Errata o incomp. dichiaraz. q. B Mod.730/95 del dich." + ITEM "07|Errata o incomp. dichiaraz. q. B Mod.730/95 del coniuge" + ITEM "08|Errata o incomp. dichiaraz. q. C Mod.730/95 del dich." + ITEM "09|Errata o incomp. dichiaraz. q. D Mod.730/95 del dich." + ITEM "10|Errata o incomp. dichiaraz. q. E Mod.730/95 del dich." + ITEM "11|Errata o incomp. dichiaraz. q. E Mod.730/95 del coniuge" + ITEM "12|Errata o incomp. dichiaraz. q. F Mod.730/95 del dich." + ITEM "13|Errata o incomp. dichiaraz. q. F Mod.730/95 del coniuge" + FIELD LF_QUAA2->M730NLIQ + FLAGS "Z" + OUTPUT QA2F_730NLIQ + GROUP G_ALL +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 14 "@bDati identificativi del C.A.A.F che ha prestato assistenza " +END + +NUMBER F_CODCAAF 5 +BEGIN + PROMPT 2 15 "Codice " + FIELD LF_QUAA2->CODCAAF + USE %CAF + CHECKTYPE NORMAL + INPUT CODTAB F_CODCAAF + DISPLAY "Codice" CODTAB + DISPLAY "Denominazione@50" S0 + DISPLAY "N.ro iscrizione" I1 + DISPLAY "Codice fiscale@16" S1 + OUTPUT F_CODCAAF CODTAB + OUTPUT F_DENCAAF S0 + OUTPUT F_NISCRA I1 + OUTPUT F_CODFISCAAF S1 + GROUP G_ALL + FLAGS "Z" +END + +STRING F_DENCAAF 50 +BEGIN + PROMPT 26 15 "" + FLAGS "DU" +END + +STRING F_CODFISCAAF 16 +BEGIN + PROMPT 2 16 "23 Cod.fiscale " + FLAGS "D" +END + +NUMBER F_NISCRA 5 +BEGIN + PROMPT 50 16 "25 N.iscrizione albo " + FLAGS "D" +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/m770/771230b.uml b/m770/771230b.uml index 28e464264..e588c987b 100755 --- a/m770/771230b.uml +++ b/m770/771230b.uml @@ -65,9 +65,14 @@ BEGIN KEY 1 END +TEXT DLG_NULL +BEGIN +PROMPT 3 2 "Causale" +END + STRING F_CODCAUS 2 BEGIN - PROMPT 3 3 "Causale " + PROMPT 3 3 "" USE %CA7 SELECT ((I0!="1015")&&(S1="D")) INPUT CODTAB F_CODCAUS DISPLAY "Codice " CODTAB @@ -89,20 +94,16 @@ END NUMBER F_CODTRIB 4 BEGIN - PROMPT 3 4 "" + PROMPT 8 3 "" FLAGS "D" END STRING QDF_CODCAUSD 1 -BEGIN - PROMPT 9 4 "" - FLAGS "D" -END - -LISTBOX F_DESCRCAUS 60 -BEGIN - PROMPT 12 4 "" - ITEM "|" +BEGIN + PROMPT 14 3 "" + SHEET "Codice|Descrizione@60" + INPUT QDF_CODCAUSD + ITEM " | " ITEM "A|prestaz. di lav. aut. ... nell’es. arti o prof. abituale" ITEM "B|prestaz. rese da amministratori, sindaci e revisori..." ITEM "C|prestaz. rese da collaboratori a giornali, riviste, ..." @@ -120,6 +121,14 @@ BEGIN ITEM "R|indennità corrisp. per la cessaz. di attività sportiva prof" ITEM "S|indennità di trasf. o di rimborso forfettario di spese..." ITEM "T|altro titolo diverso dai precedenti" + OUTPUT QDF_CODCAUSD + OUTPUT F_DESCRCAUS + FLAGS "D" +END + +STRING F_DESCRCAUS 60 +BEGIN + PROMPT 17 3 "" FLAGS "D" END diff --git a/m770/771290a.uml b/m770/771290a.uml index 2d3f05a96..06ab18f5e 100755 --- a/m770/771290a.uml +++ b/m770/771290a.uml @@ -71,8 +71,8 @@ END NUMBER F_ENTE 2 BEGIN - PROMPT 2 8 "" - COPY USE F_H1ANNO + PROMPT 2 8 "" + USE LF_QUAH CHECKTYPE REQUIRED INPUT CODDITTA F_CODDITTA SELECT INPUT H1ANNO F_H1ANNO SELECT @@ -81,13 +81,14 @@ BEGIN COPY OUTPUT F_H1ANNO FIELD LF_QUAH->H1ENTE MESSAGE COPY,F_ENTEBIS - KEY 1 -END + KEY 1 + FLAGS "Z" + END NUMBER F_ENTEBIS 2 BEGIN PROMPT 2 8 "" - FLAGS "G" + FLAGS "GZ" USE %ENT CHECKTYPE FORCED INPUT CODTAB F_ENTEBIS diff --git a/m770/771310.cpp b/m770/771310.cpp index 672ea1a4c..6444082f3 100755 --- a/m770/771310.cpp +++ b/m770/771310.cpp @@ -1,474 +1,476 @@ -// 771310.cpp - Modello 770 - Gestione quadro L -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "771310.h" -#include "774100.h" -#include "774200.h" -#include "77lib.h" -#include "scperc.h" -#include "rver.h" -#include "rpag.h" -#include "quadrol.h" - -class M71310_application : public TRelation_application -{ - TRelation* _rel; - TMask* _msk; - TGenera _app; - TConfig* _cnf; - int _anno; - - protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual TRelation* get_relation() const { return _rel; } - virtual TMask* get_mask(int mode) { return _msk; } - virtual bool changing_mask(int mode) {return FALSE; } - virtual void init_query_mode(TMask&); - virtual void init_modify_mode(TMask&); - virtual void init_insert_mode(TMask&); - virtual void on_config_change(); - virtual int rewrite(const TMask& m); - virtual int write(const TMask& m); - void build_note(const TMask& m); - void set_field_note(TMask& m); - bool changed_anno_dic(TMask& m); - real arrotonda(const TMask& m); - static bool generazione (TMask_field& f, KEY k); - static bool genera_para (TMask_field& f, KEY k); - static bool tipo (TMask_field& f, KEY k); - static bool luogo (TMask_field& f, KEY k); - static bool auto_premi (TMask_field& f, KEY k); - static bool mese (TMask_field& f, KEY k); - static bool anno (TMask_field& f, KEY k); - static bool cod_tributo (TMask_field& f, KEY k); - static bool codditta_hnd(TMask_field& f, KEY k); - static bool artbil_hnd(TMask_field& f, KEY k); - - public: - M71310_application() {} -}; - -M71310_application& app() { return (M71310_application&) main_app(); } - -bool M71310_application::generazione(TMask_field& f , KEY k) -{ - if (k == K_SPACE) - app()._app.set(get_firm_770(), app()._cnf); - - return TRUE; -} - -bool M71310_application::genera_para(TMask_field& f , KEY k) -{ - if (k == K_SPACE) - { - TString appname("776mod -4 d"); - TExternal_app a(appname); - a.run(); - f.mask().set_focus(); - } - return TRUE; -} - -bool M71310_application::codditta_hnd(TMask_field& f, KEY k) -{ - if (k == K_TAB && !(f.mask().is_running()) ) - { - TString16 codditta; codditta << get_firm_770(); - if (codditta != "0") - { - f.set(codditta); - f.check(); - } - } - return TRUE; -} - -bool M71310_application::mese(TMask_field& f , KEY k) -{ -// is_running() serve per fare il controllo solo quando la maschera sta andando -// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera -// vengono ignorati. -// Il K_TAB mi fa scattare il controllo quando lascio il campo -// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera - - if (k == K_TAB || k == K_ENTER) - { - int mese = f.mask().get_int(F_QLMESEPAG); - - if (mese == 0) - return f.error_box("Il mese di pagamento deve essere indicato obbligatoriamente"); - } - return TRUE; -} - -bool M71310_application::anno(TMask_field& f , KEY k) -{ -// is_running() serve per fare il controllo solo quando la maschera sta andando -// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera -// vengono ignorati. -// Il K_TAB mi fa scattare il controllo quando lascio il campo -// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera - - if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER) - { - int anno = f.mask().get_int(F_QLANNOPAG); - - if (anno == 0) - return f.error_box("L'anno di pagamento deve essere indicato obbligatoriamente"); - } - return TRUE; -} - -bool M71310_application::cod_tributo(TMask_field& f , KEY k) -{ -// is_running() serve per fare il controllo solo quando la maschera sta andando -// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera -// vengono ignorati. -// Il K_TAB mi fa scattare il controllo quando lascio il campo -// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera - - if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER) - { - int tributo = f.mask().get_int(F_QLCODTRIB); - if (tributo == 0) - return f.error_box("Il codice tributo deve essere indicato obbligatoriamente"); - } - return TRUE; -} - -// "auto-premimento" -// Sia da F_ABI che da F_NUMERO -bool M71310_application::auto_premi(TMask_field& f, KEY k) -{ - if (k == K_CTRL+K_TAB && f.mask().is_running()) - { - f.set_dirty(); - return TRUE; - } - -// if (k == K_TAB && f.mask().is_running()) -// f.mask().stop_run(K_AUTO_ENTER); - return TRUE; -} - -bool M71310_application::tipo(TMask_field& f , KEY k) -{ - if (k == K_SPACE) - { - TMask& m = f.mask(); - TString16 tipo = m.get(F_QLTIPOVERS); - TString16 luogo = m.get(F_QLLUOVERS); - - if (tipo.not_empty() && luogo.not_empty()) - if (tipo == "D" && luogo == "T") - { - m.reset(-G_DISTINTA_TESORERIA); - m.disable(-G_DISTINTA_TESORERIA); - } - else - m.enable(-G_DISTINTA_TESORERIA); - } - return TRUE; -} - -bool M71310_application::luogo(TMask_field& f , KEY k) -{ - if (k == K_SPACE) - { - TMask& m = f.mask(); - TString16 tipo = m.get(F_QLTIPOVERS); - TString16 luogo = m.get(F_QLLUOVERS); - - if (tipo.not_empty()) - if (tipo == "D" && luogo == "T") - { - m.reset(-G_DISTINTA_TESORERIA); - m.disable(-G_DISTINTA_TESORERIA); - } - else - m.enable(-G_DISTINTA_TESORERIA); - } - return TRUE; -} - -// Tenta di mandare il focus al campo visibile invece che a quello -// nascosto -bool M71310_application::artbil_hnd(TMask_field& f , KEY k) -{ - if (k == K_TAB) - { - TMask& m = f.mask(); - const char tipo = m.get(F_QLTIPOVERS)[0]; - const char luogo = m.get(F_QLLUOVERS)[0]; - -// Determina chi ha il focus in questo momento - TMask_field& fld = m.focus_field(); - -// Se il focus e' sull'ultimo campo prima di F_ABI - if (fld.dlg() == F_ARTBIL) - { -// WINDOW win; -// Determina chi ce lo dovrebbe avere dopo.. - if (tipo == 'B') - { - TMask_field& fabi = m.field(F_ABI); - fabi.set_focus(); -// win = m.field(F_ABI).win(); -// m.set_focus_win(win, TRUE); - } - } - } - return TRUE; -} - -void M71310_application::on_config_change() -{ - TConfig conf(CONFIG_STUDIO); - _anno = (int) conf.get_long(ANNO_SEL); -} - -// Determina se l'utente ha cambiato l'anno di dichiarazione -// impostato. Se si' non bisogna toccarlo -bool M71310_application::changed_anno_dic(TMask& m) -{ - const int anno_corr = m.get_int(F_ANNODIC); - return anno_corr ? anno_corr != _anno : FALSE; -} - -void M71310_application::init_insert_mode(TMask& m) -{ - if (!changed_anno_dic(m)) - m.set(F_ANNODIC, _anno); - m.disable(F_ANNODIC); - m.disable(F_GENERA); - m.enable (F_QLRITEFF); - m.enable (F_QLRITVER); - m.enable (F_QLRSS); - //m.enable (F_QLNOTE); - m.enable (F_NOTEA); - m.enable (F_NOTEB); - m.enable (F_NOTEC); - m.enable (F_NOTED); - m.enable (F_NOTEE); - m.enable (F_NOTEF); - m.enable (F_NOTEG); -} - -void M71310_application::init_query_mode(TMask& m) -{ - if (!changed_anno_dic(m)) - m.set(F_ANNODIC, _anno); - m.enable(F_ANNODIC); - m.enable (F_GENERA); - m.disable(F_QLRITEFF); - m.disable(F_QLRITVER); - m.disable(F_QLRSS); - //m.disable(F_QLNOTE); - m.disable(F_NOTEA); - m.disable(F_NOTEB); - m.disable(F_NOTEC); - m.disable(F_NOTED); - m.disable(F_NOTEE); - m.disable(F_NOTEF); - m.disable(F_NOTEG); -} - -void M71310_application::init_modify_mode(TMask& m) -{ - if (!changed_anno_dic(m)) - m.set(F_ANNODIC, _anno); - m.disable(F_ANNODIC); - set_field_note(m); - - m.disable(F_GENERA); - m.enable (F_QLRITEFF); - m.enable (F_QLRITVER); - m.enable (F_QLRSS); - //m.enable (F_QLNOTE); - m.enable (F_NOTEA); - m.enable (F_NOTEB); - m.enable (F_NOTEC); - m.enable (F_NOTED); - m.enable (F_NOTEE); - m.enable (F_NOTEF); - m.enable (F_NOTEG); -} - -void M71310_application::set_field_note(TMask& m) -{ - TString note = _rel->lfile().get(QUL_QLNOTE); - - if (note != "") - { - char A,B,C,D,E,F,G; - - int p = note.len() - 1; - - A = note[0]; - if (p >= 1) - B = note[1]; - if (p >= 2) - C = note[2]; - if (p >= 3) - D = note[3]; - if (p >= 4) - E = note[4]; - if (p >= 5) - F = note[5]; - if (p >= 6) - G = note[6]; - - if (A == 'A') - m.set(F_NOTEA, "X"); - - if (B == 'B') - m.set(F_NOTEB, "X"); - - if (C == 'C') - m.set(F_NOTEC, "X"); - - if (D == 'D') - m.set(F_NOTED, "X"); - - if (E == 'E') - m.set(F_NOTEE, "X"); - - if (F == 'F') - m.set(F_NOTEF, "X"); - - if (G == 'G') - m.set(F_NOTEG, "X"); - } -} - -void M71310_application::build_note(const TMask& m) -{ - char A = m.get(F_NOTEA)[0]; - char B = m.get(F_NOTEB)[0]; - char C = m.get(F_NOTEC)[0]; - char D = m.get(F_NOTED)[0]; - char E = m.get(F_NOTEE)[0]; - char F = m.get(F_NOTEF)[0]; - char G = m.get(F_NOTEG)[0]; - - TString16 note; - - if (A == 'X') - note[0] = 'A'; - else - note[0] = ' '; - - if (B == 'X') - note[1] = 'B'; - else - note[1] = ' '; - - if (C == 'X') - note[2] = 'C'; - else - note[2] = ' '; - - if (D == 'X') - note[3] = 'D'; - else - note[3] = ' '; - - if (E == 'X') - note[4] = 'E'; - else - note[4] = ' '; - - if (F == 'X') - note[5] = 'F'; - else - note[5] = ' '; - - if (G == 'X') - note[6] = 'G'; - else - note[6] = ' '; - - note [7] = '\0'; - - _rel->lfile().put(QUL_QLNOTE, note); -} - -// Arrotonda l'importo versato -real M71310_application::arrotonda(const TMask& m) -{ - real rImpVers = m.get_real(F_QLRITVER); - real rImpArr = round_770(rImpVers); - return rImpArr; -} - -int M71310_application::rewrite(const TMask& m) -{ - real rImpVersArr; - build_note(m); - m.autosave(*_rel); - rImpVersArr = arrotonda(m); - _rel->lfile().put(QUL_QLRITVER, rImpVersArr); - return _rel->rewrite(); -} - -int M71310_application::write(const TMask& m) -{ - real rImpVersArr; - build_note(m); - m.autosave(*_rel); - rImpVersArr = arrotonda(m); - _rel->lfile().put(QUL_QLRITVER, rImpVersArr); - return _rel->write(); -} - -bool M71310_application::user_create() -{ - _cnf = new TConfig(CONFIG_STUDIO); - _rel = new TRelation (LF_QUAL); - _msk = new TMask("771310a"); - - set_search_field(F_QLANNOPAG); - _msk->set_handler (F_GENERA, generazione); - _msk->set_handler (F_PARAMETRI, genera_para); - _msk->set_handler (F_CODDITTA, codditta_hnd); - _msk->set_handler (F_QLTIPOVERS, tipo); - _msk->set_handler (F_QLLUOVERS, luogo); - _msk->set_handler (F_QLMESEPAG, mese); - _msk->set_handler (F_QLANNOPAG, anno); - _msk->set_handler (F_QLCODTRIB, cod_tributo); - _msk->set_handler (F_QLNUMERO, auto_premi); - _msk->set_handler (F_CCQUIETANZA, auto_premi); - _msk->set_handler (F_NPROG, auto_premi); - _msk->set_handler (F_ARTBIL, artbil_hnd); - - return TRUE; -} - -bool M71310_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _cnf; - return TRUE; -} - -int m71310(int argc, char* argv[]) -{ - M71310_application a; - a.run(argc, argv, "Quadro L"); - return 0; -} - - +// 771310.cpp - Modello 770 - Gestione quadro L +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "771310.h" +#include "774100.h" +#include "774200.h" +#include "77lib.h" +#include "scperc.h" +#include "rver.h" +#include "rpag.h" +#include "quadrol.h" + +class M71310_application : public TRelation_application +{ + TRelation* _rel; + TMask* _msk; + TGenera* _app; + TConfig* _cnf; + int _anno; + + protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual TRelation* get_relation() const { return _rel; } + virtual TMask* get_mask(int mode) { return _msk; } + virtual bool changing_mask(int mode) {return FALSE; } + virtual void init_query_mode(TMask&); + virtual void init_modify_mode(TMask&); + virtual void init_insert_mode(TMask&); + virtual void on_config_change(); + virtual int rewrite(const TMask& m); + virtual int write(const TMask& m); + void build_note(const TMask& m); + void set_field_note(TMask& m); + bool changed_anno_dic(TMask& m); + real arrotonda(const TMask& m); + static bool generazione (TMask_field& f, KEY k); + static bool genera_para (TMask_field& f, KEY k); + static bool tipo (TMask_field& f, KEY k); + static bool luogo (TMask_field& f, KEY k); + static bool auto_premi (TMask_field& f, KEY k); + static bool mese (TMask_field& f, KEY k); + static bool anno (TMask_field& f, KEY k); + static bool cod_tributo (TMask_field& f, KEY k); + static bool codditta_hnd(TMask_field& f, KEY k); + static bool artbil_hnd(TMask_field& f, KEY k); + + public: + M71310_application() {} +}; + +M71310_application& app() { return (M71310_application&) main_app(); } + +bool M71310_application::generazione(TMask_field& f , KEY k) +{ + if (k == K_SPACE) + app()._app->set(get_firm_770(), app()._cnf); + + return TRUE; +} + +bool M71310_application::genera_para(TMask_field& f , KEY k) +{ + if (k == K_SPACE) + { + TString appname("776mod -4 d"); + TExternal_app a(appname); + a.run(); + f.mask().set_focus(); + } + return TRUE; +} + +bool M71310_application::codditta_hnd(TMask_field& f, KEY k) +{ + if (k == K_TAB && !(f.mask().is_running()) ) + { + TString16 codditta; codditta << get_firm_770(); + if (codditta != "0") + { + f.set(codditta); + f.check(); + } + } + return TRUE; +} + +bool M71310_application::mese(TMask_field& f , KEY k) +{ +// is_running() serve per fare il controllo solo quando la maschera sta andando +// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera +// vengono ignorati. +// Il K_TAB mi fa scattare il controllo quando lascio il campo +// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera + + if (k == K_TAB || k == K_ENTER) + { + int mese = f.mask().get_int(F_QLMESEPAG); + + if (mese == 0) + return f.error_box("Il mese di pagamento deve essere indicato obbligatoriamente"); + } + return TRUE; +} + +bool M71310_application::anno(TMask_field& f , KEY k) +{ +// is_running() serve per fare il controllo solo quando la maschera sta andando +// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera +// vengono ignorati. +// Il K_TAB mi fa scattare il controllo quando lascio il campo +// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera + + if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER) + { + int anno = f.mask().get_int(F_QLANNOPAG); + + if (anno == 0) + return f.error_box("L'anno di pagamento deve essere indicato obbligatoriamente"); + } + return TRUE; +} + +bool M71310_application::cod_tributo(TMask_field& f , KEY k) +{ +// is_running() serve per fare il controllo solo quando la maschera sta andando +// In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera +// vengono ignorati. +// Il K_TAB mi fa scattare il controllo quando lascio il campo +// Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera + + if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER) + { + int tributo = f.mask().get_int(F_QLCODTRIB); + if (tributo == 0) + return f.error_box("Il codice tributo deve essere indicato obbligatoriamente"); + } + return TRUE; +} + +// "auto-premimento" +// Sia da F_ABI che da F_NUMERO +bool M71310_application::auto_premi(TMask_field& f, KEY k) +{ + if (k == K_CTRL+K_TAB && f.mask().is_running()) + { + f.set_dirty(); + return TRUE; + } + +// if (k == K_TAB && f.mask().is_running()) +// f.mask().stop_run(K_AUTO_ENTER); + return TRUE; +} + +bool M71310_application::tipo(TMask_field& f , KEY k) +{ + if (k == K_SPACE) + { + TMask& m = f.mask(); + TString16 tipo = m.get(F_QLTIPOVERS); + TString16 luogo = m.get(F_QLLUOVERS); + + if (tipo.not_empty() && luogo.not_empty()) + if (tipo == "D" && luogo == "T") + { + m.reset(-G_DISTINTA_TESORERIA); + m.disable(-G_DISTINTA_TESORERIA); + } + else + m.enable(-G_DISTINTA_TESORERIA); + } + return TRUE; +} + +bool M71310_application::luogo(TMask_field& f , KEY k) +{ + if (k == K_SPACE) + { + TMask& m = f.mask(); + TString16 tipo = m.get(F_QLTIPOVERS); + TString16 luogo = m.get(F_QLLUOVERS); + + if (tipo.not_empty()) + if (tipo == "D" && luogo == "T") + { + m.reset(-G_DISTINTA_TESORERIA); + m.disable(-G_DISTINTA_TESORERIA); + } + else + m.enable(-G_DISTINTA_TESORERIA); + } + return TRUE; +} + +// Tenta di mandare il focus al campo visibile invece che a quello +// nascosto +bool M71310_application::artbil_hnd(TMask_field& f , KEY k) +{ + if (k == K_TAB) + { + TMask& m = f.mask(); + const char tipo = m.get(F_QLTIPOVERS)[0]; + const char luogo = m.get(F_QLLUOVERS)[0]; + +// Determina chi ha il focus in questo momento + TMask_field& fld = m.focus_field(); + +// Se il focus e' sull'ultimo campo prima di F_ABI + if (fld.dlg() == F_ARTBIL) + { +// WINDOW win; +// Determina chi ce lo dovrebbe avere dopo.. + if (tipo == 'B') + { + TMask_field& fabi = m.field(F_ABI); + fabi.set_focus(); +// win = m.field(F_ABI).win(); +// m.set_focus_win(win, TRUE); + } + } + } + return TRUE; +} + +void M71310_application::on_config_change() +{ + TConfig conf(CONFIG_STUDIO); + _anno = (int) conf.get_long(ANNO_SEL); +} + +// Determina se l'utente ha cambiato l'anno di dichiarazione +// impostato. Se si' non bisogna toccarlo +bool M71310_application::changed_anno_dic(TMask& m) +{ + const int anno_corr = m.get_int(F_ANNODIC); + return anno_corr ? anno_corr != _anno : FALSE; +} + +void M71310_application::init_insert_mode(TMask& m) +{ + if (!changed_anno_dic(m)) + m.set(F_ANNODIC, _anno); + m.disable(F_ANNODIC); + m.disable(F_GENERA); + m.enable (F_QLRITEFF); + m.enable (F_QLRITVER); + m.enable (F_QLRSS); + //m.enable (F_QLNOTE); + m.enable (F_NOTEA); + m.enable (F_NOTEB); + m.enable (F_NOTEC); + m.enable (F_NOTED); + m.enable (F_NOTEE); + m.enable (F_NOTEF); + m.enable (F_NOTEG); +} + +void M71310_application::init_query_mode(TMask& m) +{ + if (!changed_anno_dic(m)) + m.set(F_ANNODIC, _anno); + m.enable(F_ANNODIC); + m.enable (F_GENERA); + m.disable(F_QLRITEFF); + m.disable(F_QLRITVER); + m.disable(F_QLRSS); + //m.disable(F_QLNOTE); + m.disable(F_NOTEA); + m.disable(F_NOTEB); + m.disable(F_NOTEC); + m.disable(F_NOTED); + m.disable(F_NOTEE); + m.disable(F_NOTEF); + m.disable(F_NOTEG); +} + +void M71310_application::init_modify_mode(TMask& m) +{ + if (!changed_anno_dic(m)) + m.set(F_ANNODIC, _anno); + m.disable(F_ANNODIC); + set_field_note(m); + + m.disable(F_GENERA); + m.enable (F_QLRITEFF); + m.enable (F_QLRITVER); + m.enable (F_QLRSS); + //m.enable (F_QLNOTE); + m.enable (F_NOTEA); + m.enable (F_NOTEB); + m.enable (F_NOTEC); + m.enable (F_NOTED); + m.enable (F_NOTEE); + m.enable (F_NOTEF); + m.enable (F_NOTEG); +} + +void M71310_application::set_field_note(TMask& m) +{ + TString note = _rel->lfile().get(QUL_QLNOTE); + + if (note != "") + { + char A,B,C,D,E,F,G; + + int p = note.len() - 1; + + A = note[0]; + if (p >= 1) + B = note[1]; + if (p >= 2) + C = note[2]; + if (p >= 3) + D = note[3]; + if (p >= 4) + E = note[4]; + if (p >= 5) + F = note[5]; + if (p >= 6) + G = note[6]; + + if (A == 'A') + m.set(F_NOTEA, "X"); + + if (B == 'B') + m.set(F_NOTEB, "X"); + + if (C == 'C') + m.set(F_NOTEC, "X"); + + if (D == 'D') + m.set(F_NOTED, "X"); + + if (E == 'E') + m.set(F_NOTEE, "X"); + + if (F == 'F') + m.set(F_NOTEF, "X"); + + if (G == 'G') + m.set(F_NOTEG, "X"); + } +} + +void M71310_application::build_note(const TMask& m) +{ + char A = m.get(F_NOTEA)[0]; + char B = m.get(F_NOTEB)[0]; + char C = m.get(F_NOTEC)[0]; + char D = m.get(F_NOTED)[0]; + char E = m.get(F_NOTEE)[0]; + char F = m.get(F_NOTEF)[0]; + char G = m.get(F_NOTEG)[0]; + + TString16 note; + + if (A == 'X') + note[0] = 'A'; + else + note[0] = ' '; + + if (B == 'X') + note[1] = 'B'; + else + note[1] = ' '; + + if (C == 'X') + note[2] = 'C'; + else + note[2] = ' '; + + if (D == 'X') + note[3] = 'D'; + else + note[3] = ' '; + + if (E == 'X') + note[4] = 'E'; + else + note[4] = ' '; + + if (F == 'X') + note[5] = 'F'; + else + note[5] = ' '; + + if (G == 'X') + note[6] = 'G'; + else + note[6] = ' '; + + note [7] = '\0'; + + _rel->lfile().put(QUL_QLNOTE, note); +} + +// Arrotonda l'importo versato +real M71310_application::arrotonda(const TMask& m) +{ + real rImpVers = m.get_real(F_QLRITVER); + real rImpArr = round_770(rImpVers); + return rImpArr; +} + +int M71310_application::rewrite(const TMask& m) +{ + real rImpVersArr; + build_note(m); + m.autosave(*_rel); + rImpVersArr = arrotonda(m); + _rel->lfile().put(QUL_QLRITVER, rImpVersArr); + return _rel->rewrite(); +} + +int M71310_application::write(const TMask& m) +{ + real rImpVersArr; + build_note(m); + m.autosave(*_rel); + rImpVersArr = arrotonda(m); + _rel->lfile().put(QUL_QLRITVER, rImpVersArr); + return _rel->write(); +} + +bool M71310_application::user_create() +{ + _cnf = new TConfig(CONFIG_STUDIO); + _rel = new TRelation (LF_QUAL); + _msk = new TMask("771310a"); + _app = new TGenera('d'); + + set_search_field(F_QLANNOPAG); + _msk->set_handler (F_GENERA, generazione); + _msk->set_handler (F_PARAMETRI, genera_para); + _msk->set_handler (F_CODDITTA, codditta_hnd); + _msk->set_handler (F_QLTIPOVERS, tipo); + _msk->set_handler (F_QLLUOVERS, luogo); + _msk->set_handler (F_QLMESEPAG, mese); + _msk->set_handler (F_QLANNOPAG, anno); + _msk->set_handler (F_QLCODTRIB, cod_tributo); + _msk->set_handler (F_QLNUMERO, auto_premi); + _msk->set_handler (F_CCQUIETANZA, auto_premi); + _msk->set_handler (F_NPROG, auto_premi); + _msk->set_handler (F_ARTBIL, artbil_hnd); + + return TRUE; +} + +bool M71310_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _cnf; + delete _app; + return TRUE; +} + +int m71310(int argc, char* argv[]) +{ + M71310_application a; + a.run(argc, argv, "Quadro L"); + return 0; +} + + diff --git a/m770/774100.cpp b/m770/774100.cpp index c72e1e17a..641e55cc2 100755 --- a/m770/774100.cpp +++ b/m770/774100.cpp @@ -1,533 +1,535 @@ -// 774100.cpp - Generazione quadro L -// -// 774 -0 S (livello di studio) oppure -// 774 -0 D (livello di ditta) -// -// Lista modifiche -// -// 21.12.95 Azzera solo i record con AP=anno dichiarazione (nf) -// 8.01.96 Scambiate nel quadrol la chiave 2 con la 1 (nf) -// -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "rpag.h" -#include "rver.h" -#include "scperc.h" -#include "quadrol.h" -#include "774100.h" -#include "77lib.h" - -// inizializzato in TGenera::set() -// usato in filter_func() -HIDDEN TGenera* this_genera = NULL; -// Possibili esiti della dialog-box di configurazione parametri di gen. -HIDDEN const int UNCHANGED = 0; -HIDDEN const int CHANGED = 1; -HIDDEN const int ESCI = 2; - -void TVersamenti::set (TSchedaP& sc, const long numvers) -{ - _key.format("%4ld%c%4ld%4d%4ld", sc.codditta(),sc.tipoa(),sc.codanagr(),sc.nprog(),numvers); - add(_key); -} - -bool TVersamenti::find (TSchedaP& sc, const long numvers) -{ - _key.format("%4ld%c%4ld%4d%4ld", sc.codditta(),sc.tipoa(),sc.codanagr(),sc.nprog(),numvers); - return is_key(_key); -} - -// Accetta un record solo se: -// l'anno della data-pagamento == annodic E -// il pagamento e' collegato ad un versamento (non importa quale) -bool filter_func (const TRelation* rel) -{ - TDate datapag; - int anno,annod; - long nvers; - - annod = this_genera->_annodic; - datapag = rel->lfile().get(PAG_DATAPAG); - nvers = rel->lfile().get_long(PAG_NUMVERS); - anno = datapag.year(); - - return anno == annod && nvers > 0L; -} - -bool TGenera::causale1015(int causale) -{ - TTable ca7("%CA7"); - TString dep; - int artbil = 0; - - ca7.zero(); - dep = format("%02d", causale); - ca7.put("CODTAB", dep); - const bool ok = ca7.read() == NOERR; - - if (!ok) ca7.zero(); - - _ab1015 = ca7.get_int("I3"); - _ct1015 = ca7.get_int("I0"); - _cq1015 = ca7.get ("S1"); - - return ok; -} - -void TGenera::causale(int causale) -{ - TTable ca7("%CA7"); - TString dep; - - _codqua = ""; - - ca7.zero(); - dep = format("%02d", causale); - ca7.put("CODTAB", dep); - if (ca7.read() == NOERR) - { - _codqua = ca7.get ("S1"); - _artbil = ca7.get_int("I3"); - _codtrib = ca7.get_int("I0"); - } -} - -bool TGenera::set(const long codditta, TConfig* cnf, const char* section) -{ - TString16 filt; - int causale; - TRelation* rel; - TCursor* cur; - - if (!yesno_box("Conferma la generazione dei versamenti?")) - return FALSE; - - _codditta = codditta; - _annodic = (int)cnf->get_long(ANNO_SEL, section); - - this_genera = this; - - rel = new TRelation (LF_RPAG); - filt.format("CODDITTA=%ld", codditta); - - cur = new TCursor(rel,filt,1); - cur->set_filterfunction (filter_func); - - causale = atoi(cnf->get("CoCa1015", section)); - - if (causale) - { - if (!causale1015(causale)) - return warning_box("Manca la causale 1015 nella tabella causali"); - } - else - return warning_box("Manca la causale 1015 nei parametri di studio"); - - azzera_quadroL(); - genera_riga(cur); - arrotonda(); - - delete cur; - delete rel; - - return FALSE; -} - -int TGenera::controllo_parametri() -{ - TLocalisamfile base (LF_BASE); - base.setkey(1); - base.zero(); - base.put("CODDITTA", _codditta); - const int rc = base.read(); - if (rc == NOERR) - { - TDate dv (base.get_date("DATAVERS")); - char lv = base.get_char("LUOVERS"); - char tv = base.get_char("TIPOVERS"); - TString s(base.get("SERIE")); - TString n(base.get("NUMERO")); - - if (!dv.ok() || lv == '\0' || tv == '\0' || n == "" || (s == "" && tv != 'C') ) - { - TString appname("776mod -4 d"); - TExternal_app a (appname); - a.run(); - - TMailbox m; - TMessage* msg = m.next_s(""); - int subj; -// 1 => uscito con Registra -// 0 => uscito con Quit - if (msg != NULL) - { - subj = atoi(msg->body()); - if (subj) - return CHANGED; - else - return ESCI; - } - } - } -#ifdef DBG - if (rc != NOERR) - return warning_box("Errore di lettura su base cod. %d", rc); -#endif - return UNCHANGED; -} - -bool TGenera::azzera_quadroL() -{ - TString16 filt; - - TRelation* rl; - TCursor* cl; - - filt.format("CODDITTA=%ld", _codditta); - - rl = new TRelation(LF_QUAL); - cl = new TCursor(rl,filt,1); - TRecnotype cl_items = cl->items(); - cl->freeze(); - - (*cl) = 0L; - TProgind progn(cl_items, "Azzeramento quadro L", FALSE, TRUE); - TLocalisamfile& fl = cl->file(); - - for (int i = 0; i < cl_items; i++, ++(*cl)) - { - progn.addstatus(1); - TString quadro(2); - -// solo quelli dell'anno dichiarazione - if (fl.get_int(QUL_QLAP) != _annodic) - continue; - -// solo quelli di quadri C/D/D1/E/E1 - quadro = fl.get(QUL_QLCODQUA); - if (quadro != "C" && quadro != "D" && quadro != "D1" && - quadro != "E" && quadro != "E1") - continue; -// rimozione record - fl.remove(); - } - - return TRUE; -} - -void TGenera::dati_rver(TLocalisamfile& rver,TSchedaP& sch, long numvers) -{ - rver.zero(); - rver.put(VER_CODDITTA, sch.codditta()); - rver.put(VER_TIPOA, sch.tipoa()); - rver.put(VER_CODANAGR, sch.codanagr()); - rver.put(VER_NPROG, sch.nprog()); - rver.put(VER_NRIGA, (long)numvers); - rver.read(); - if (rver.bad()) - rver.zero(); - - _ver1015 = rver.get_bool(VER_VERS1015); - _ritver = rver.get_real(VER_IMPVERS); - - if (_ver1015) - { - //Prendo i dati su flags LF_BASE - TLocalisamfile base(LF_BASE); - - base.setkey(1); - base.zero(); - base.put("CODDITTA", _codditta); - if (base.read(_isequal) == NOERR) - { - _datavers = base.get_date("DATAVERS"); - _mesepag = 12; - _luovers = base.get_char("LUOVERS"); - _tipover = base.get_char("TIPOVERS"); - _serie = base.get ("SERIE"); - _numero = base.get ("NUMERO"); - if (_tipover == DELEGA_BANCARIA) - _sNprog = _numero.mid(6); - - rver.reread(_testandlock); - rver.put("DATAVERS", _datavers); - rver.put("TIPOVERS", _tipover); - rver.put("SERIE", _serie); - rver.put("NUMERO", _numero); - rver.put("LUOVERS", _luovers); - rver.rewrite(); - rver.reread(_unlock); - } - } - else - { - _datavers = rver.get_date(VER_DATAVERS); - _luovers = rver.get_char(VER_LUOVERS); - _tipover = rver.get_char(VER_TIPOVERS); - _serie = rver.get (VER_SERIE); - _numero = rver.get (VER_NUMERO); - _sNprog = rver.get (VER_PROGBANC); - _sNprog.trim(); - if (_sNprog.not_empty()) - _numero << _sNprog; - } -} - -void TGenera::dati_scperc(TSchedaP& sch) -{ - TLocalisamfile scperc(LF_SCPERC); - int codtrib = 0; - - scperc.setkey(1); - scperc.zero(); - scperc.put(SPR_CODDITTA, sch.codditta()); - scperc.put(SPR_TIPOA, sch.tipoa()); - scperc.put(SPR_CODANAGR, sch.codanagr()); - scperc.put(SPR_NPROG, sch.nprog()); - if (scperc.read(_isequal) == NOERR) - _causale = scperc.get_int(SPR_CODCAUS); -} - -void TGenera::arrotonda() -{ - TString16 filt; - real importo = ZERO; - - TRelation* rl; - TCursor* cl; - - filt.format("CODDITTA=%ld", _codditta); - - rl = new TRelation(LF_QUAL); - cl = new TCursor(rl,filt,1); - TRecnotype cl_items = cl->items(); - cl->freeze(); - - (*cl) = 0L; - TProgind progn(cl_items,"Arrotondamento ritenute versate", FALSE, TRUE); - TLocalisamfile& fl = cl->file(); - - for (int i = 0; i < cl_items; i++, ++(*cl)) - { - progn.addstatus(1); - importo = fl.get_real(QUL_QLRITVER); - importo = round_770(importo); - fl.put(QUL_QLRITVER, importo); - fl.rewrite(); - } -} - -void TGenera::genera_riga(TCursor* cur) -{ - TLocalisamfile ql (LF_QUAL); - TLocalisamfile rver(LF_RVER); - real riteff,ritver; - long numvers,codanagr,codp; - char tipoa,tipop; - int nprog,nprogp; - bool prima_volta = TRUE; - bool gia_fatto = FALSE; - TString perc,percp; - - (*cur) = 0L; - TRecnotype items_rpag = cur->items(); - TString scritta(60); - scritta.format("Generazione versamenti per la ditta %ld", _codditta); - TProgind progn(items_rpag, scritta, FALSE, TRUE); - - riteff = ZERO; - ritver = ZERO; - - _righe_gia_presenti = new TVersamenti; - _righe_gia_presenti->destroy(); - - tipop = 'Z'; - codp = 99999; - nprogp = 9999; - - TSchedaP scheda_prec; - for (int i = 0; i < items_rpag; i++, ++(*cur), progn.addstatus(1)) - { -// Leggo i dati su RPAG - TDate datapag(cur->curr().get(PAG_DATAPAG)); - _mesepag = datapag.month();; - _annopag = datapag.year(); - riteff = cur->curr().get_real(PAG_RITENUTA); - numvers = cur->curr().get_long(PAG_NUMVERS); - tipoa = cur->curr().get_char(PAG_TIPOA); - codanagr = cur->curr().get_long(PAG_CODANAGR); - nprog = cur->curr().get_int (PAG_NPROG); - - TSchedaP scheda_corr(_codditta, tipoa, codanagr, nprog); - dati_rver(rver,scheda_corr,numvers); - - if (scheda_corr != scheda_prec) - { - dati_scperc(scheda_corr); - causale(_causale); - } - scheda_prec.set(_codditta,tipoa,codanagr,nprog); - -// Se e' tributo1015 posso evitare di controllare il codice quadro - if (!_ver1015) - { - if (_codqua != "C" && _codqua != "D" && _codqua != "D1" && - _codqua != "E" && _codqua != "E1") - continue; - } - else - if (!gia_fatto) - { - gia_fatto = TRUE; - const int cp = controllo_parametri(); - if (cp == CHANGED) - dati_rver(rver,scheda_corr,numvers); - else - if (cp == ESCI) - break; // ho premuto il bottone FINE - } - - ql.setkey(1); - ql.zero(); - ql.put(QUL_CODDITTA, _codditta); - ql.put(QUL_QLMP, _mesepag); - ql.put(QUL_QLAP, _annopag); - ql.put(QUL_QLDV, _datavers); - ql.put(QUL_QLLV, _luovers); - ql.put(QUL_QLTV, _tipover); - - if (_ver1015) - { - ql.put(QUL_QLCT, _ct1015); - ql.put(QUL_QLAB, _ab1015); - ql.put(QUL_QLCODQUA, _cq1015); - } - else - { - ql.put(QUL_QLCT, _codtrib); - ql.put(QUL_QLAB, _artbil); - ql.put(QUL_QLCODQUA, _codqua); - } - ql.put(QUL_QLSERIE, _serie); - ql.put(QUL_QLNUMERO, _numero); - - TRectype dep(ql.curr()); - - if (ql.read(_isequal, _lock) == NOERR) - { - _riteff = ql.get_real(QUL_QLRITEFF); - _riteff += riteff; - ql.put(QUL_QLRITEFF, _riteff); - - if (!_righe_gia_presenti->find(scheda_corr,numvers)) - { - ritver = ql.get_real(QUL_QLRITVER); - ritver += _ritver; - ql.put(QUL_QLRITVER, ritver); - } - ql.rewrite(); - } - else - { - ql.zero(); - ql.curr() = dep; - ql.put(QUL_QLRITEFF, riteff); - ql.put(QUL_QLRITVER, _ritver); - ql.write(); - } - _righe_gia_presenti->set(scheda_corr,numvers); - } -} - - -class TGenera_versamenti : public TApplication -{ - char _liv; - TString16 _section; - TConfig* _cnf; - public: - TGenera* _genera; - TLocalisamfile *_rver, *_rpag, *_base, *_scperc, *_ql; - public: - virtual bool create(); - virtual bool menu(MENU_TAG m); - virtual bool destroy(); - - TGenera& genera() { return *_genera; } - - public: - TGenera_versamenti(char livello) : _liv(toupper(livello)) {} - ~TGenera_versamenti() {} -}; - -TGenera_versamenti& app() { return (TGenera_versamenti&)main_app(); } - -bool TGenera_versamenti::menu(MENU_TAG m) -{ - long codditta, codditta_prec; - int i = 0; - - if (m == BAR_ITEM(1)) - if (_liv == 'S') - { - codditta_prec = get_firm_770(); - while ((codditta = _cnf->get_long(DITTE_SEL, _section, i++)) != 0L) - { - set_firm_770(codditta); - _genera->set(codditta, _cnf, _section); - } - set_firm_770(codditta_prec); - - return FALSE; - } - else - return _genera->set(get_firm_770(), _cnf, _section); - - return FALSE; -} - -bool TGenera_versamenti::create() -{ - TApplication::create(); - _rver = new TLocalisamfile(LF_RVER); - _rpag = new TLocalisamfile(LF_RPAG); - _scperc = new TLocalisamfile(LF_SCPERC); - _base = new TLocalisamfile(LF_BASE); - _ql = new TLocalisamfile(LF_QUAL); - _genera = new TGenera; - _cnf = new TConfig(_liv == 'S' ? CONFIG_USER : CONFIG_STUDIO); - - _section = name(); - _section.cut(2); - - dispatch_e_menu (BAR_ITEM(1)); - return TRUE; -} - -bool TGenera_versamenti::destroy() -{ - delete _rver; - delete _rpag; - delete _scperc; - delete _base; - delete _ql; - delete _genera; - delete _cnf; - return TApplication::destroy(); -} - -int m74100 (int argc, char* argv[]) -{ - TGenera_versamenti a(*argv[2]); - a.run(argc, argv, "Generazione versamenti"); - return 0; -} - +// 774100.cpp - Generazione quadro L +// +// 774 -0 S (livello di studio) oppure +// 774 -0 D (livello di ditta) +// +// Lista modifiche +// +// 21.12.95 Azzera solo i record con AP=anno dichiarazione (nf) +// 8.01.96 Scambiate nel quadrol la chiave 2 con la 1 (nf) +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rpag.h" +#include "rver.h" +#include "scperc.h" +#include "quadrol.h" +#include "774100.h" +#include "77lib.h" + +// inizializzato in TGenera::set() +// usato in filter_func() +HIDDEN TGenera* this_genera = NULL; +// Possibili esiti della dialog-box di configurazione parametri di gen. +HIDDEN const int UNCHANGED = 0; +HIDDEN const int CHANGED = 1; +HIDDEN const int ESCI = 2; + +void TVersamenti::set (TSchedaP& sc, const long numvers) +{ + _key.format("%4ld%c%4ld%4d%4ld", sc.codditta(),sc.tipoa(),sc.codanagr(),sc.nprog(),numvers); + add(_key); +} + +bool TVersamenti::find (TSchedaP& sc, const long numvers) +{ + _key.format("%4ld%c%4ld%4d%4ld", sc.codditta(),sc.tipoa(),sc.codanagr(),sc.nprog(),numvers); + return is_key(_key); +} + +// Accetta un record solo se: +// l'anno della data-pagamento == annodic E +// il pagamento e' collegato ad un versamento (non importa quale) +bool filter_func (const TRelation* rel) +{ + TDate datapag; + int anno,annod; + long nvers; + + annod = this_genera->_annodic; + datapag = rel->lfile().get(PAG_DATAPAG); + nvers = rel->lfile().get_long(PAG_NUMVERS); + anno = datapag.year(); + + return anno == annod && nvers > 0L; +} + +bool TGenera::causale1015(int causale) +{ + TTable ca7("%CA7"); + TString dep; + int artbil = 0; + + ca7.zero(); + dep = format("%02d", causale); + ca7.put("CODTAB", dep); + const bool ok = ca7.read() == NOERR; + + if (!ok) ca7.zero(); + + _ab1015 = ca7.get_int("I3"); + _ct1015 = ca7.get_int("I0"); + _cq1015 = ca7.get ("S1"); + + return ok; +} + +void TGenera::causale(int causale) +{ + TTable ca7("%CA7"); + TString dep; + + _codqua = ""; + + ca7.zero(); + dep = format("%02d", causale); + ca7.put("CODTAB", dep); + if (ca7.read() == NOERR) + { + _codqua = ca7.get ("S1"); + _artbil = ca7.get_int("I3"); + _codtrib = ca7.get_int("I0"); + } +} + +bool TGenera::set(const long codditta, TConfig* cnf, const char* section) +{ + TString16 filt; + TRelation rel(LF_RPAG); + int causale; + bool ok_gen; + + this_genera = this; + + // controllo presenza causale 1015 + causale = atoi(cnf->get("CoCa1015", section)); + if (causale) + { + if (!causale1015(causale)) + return warning_box("Manca la causale 1015 nella tabella causali"); + } + else + return warning_box("Manca la causale 1015 nei parametri di studio"); + + // conferma di generazione + TString scritta(60); + scritta.format("Conferma generazione dei versamenti\n per la ditta %ld ?", codditta); + if (!yesno_box(scritta)) + return TRUE; + + // valorizzo anno dichiarazione e codice ditta per cui generare + _codditta = codditta; + _annodic = (int)cnf->get_long(ANNO_SEL, section); + + // preparo cursore su righe di versamento + filt.format("CODDITTA=%ld", codditta); + TCursor cur(&rel,filt,1); + cur.set_filterfunction (filter_func); + + // azzeramento versamenti quadro L + azzera_quadroL(); + + // generazione versamenti quadro L + // (se ritorna una richiesta di fine non prosegue con l'arrotondamento) + if (ok_gen = genera_riga(&cur)) + arrotonda(); + + return ok_gen; +} + +int TGenera::controllo_parametri() +{ + TLocalisamfile base (LF_BASE); + base.setkey(1); + base.zero(); + base.put("CODDITTA", _codditta); + const int rc = base.read(); + if (rc == NOERR) + { + TString appname; + appname.format("776mod -4 %c",_liv); + + TExternal_app a (appname); + a.run(); + + TMailbox m; + TMessage* msg = m.next_s(""); + int subj; + // 1 => uscito con Registra + // 0 => uscito con Quit + if (msg != NULL) + { + subj = atoi(msg->body()); + if (subj) + return CHANGED; + else + return ESCI; + } + } +#ifdef DBG + if (rc != NOERR) + return warning_box("Errore di lettura su base cod. %d", rc); +#endif + return UNCHANGED; +} + +bool TGenera::azzera_quadroL() +{ + TString16 filt; + + TRelation* rl; + TCursor* cl; + + filt.format("CODDITTA=%ld", _codditta); + + rl = new TRelation(LF_QUAL); + cl = new TCursor(rl,filt,1); + TRecnotype cl_items = cl->items(); + cl->freeze(); + + (*cl) = 0L; + + TString scritta(60); + scritta.format("Azzeramento quadro L per la ditta %ld", _codditta); + TProgind progn(cl_items, scritta, FALSE, TRUE); + TLocalisamfile& fl = cl->file(); + + for (int i = 0; i < cl_items; i++, ++(*cl)) + { + progn.addstatus(1); + TString quadro(2); + +// solo quelli dell'anno dichiarazione + if (fl.get_int(QUL_QLAP) != _annodic) + continue; + +// solo quelli di quadri C/D/D1/E/E1 + quadro = fl.get(QUL_QLCODQUA); + if (quadro != "C" && quadro != "D" && quadro != "D1" && + quadro != "E" && quadro != "E1") + continue; +// rimozione record + fl.remove(); + } + + return TRUE; +} + +void TGenera::dati_rver(TLocalisamfile& rver,TSchedaP& sch, long numvers) +{ + rver.zero(); + rver.put(VER_CODDITTA, sch.codditta()); + rver.put(VER_TIPOA, sch.tipoa()); + rver.put(VER_CODANAGR, sch.codanagr()); + rver.put(VER_NPROG, sch.nprog()); + rver.put(VER_NRIGA, (long)numvers); + rver.read(); + if (rver.bad()) + rver.zero(); + + _ver1015 = rver.get_bool(VER_VERS1015); + _ritver = rver.get_real(VER_IMPVERS); + + if (_ver1015) + { + //Prendo i dati su flags LF_BASE + TLocalisamfile base(LF_BASE); + + base.setkey(1); + base.zero(); + base.put("CODDITTA", _codditta); + if (base.read(_isequal) == NOERR) + { + _datavers = base.get_date("DATAVERS"); + _mesepag = 12; + _luovers = base.get_char("LUOVERS"); + _tipover = base.get_char("TIPOVERS"); + _serie = base.get ("SERIE"); + _numero = base.get ("NUMERO"); + if (_tipover == DELEGA_BANCARIA) + _sNprog = _numero.mid(6); + + rver.reread(_testandlock); + rver.put("DATAVERS", _datavers); + rver.put("TIPOVERS", _tipover); + rver.put("SERIE", _serie); + rver.put("NUMERO", _numero); + rver.put("LUOVERS", _luovers); + rver.rewrite(); + rver.reread(_unlock); + } + } + else + { + _datavers = rver.get_date(VER_DATAVERS); + _luovers = rver.get_char(VER_LUOVERS); + _tipover = rver.get_char(VER_TIPOVERS); + _serie = rver.get(VER_SERIE); + _numero = rver.get(VER_NUMERO); + _sNprog = rver.get(VER_PROGBANC); + _sNprog.trim(); + if (_tipover == DELEGA_BANCARIA && _sNprog != "000000") + _numero << _sNprog; + } +} + +void TGenera::dati_scperc(TSchedaP& sch) +{ + TLocalisamfile scperc(LF_SCPERC); + int codtrib = 0; + + scperc.setkey(1); + scperc.zero(); + scperc.put(SPR_CODDITTA, sch.codditta()); + scperc.put(SPR_TIPOA, sch.tipoa()); + scperc.put(SPR_CODANAGR, sch.codanagr()); + scperc.put(SPR_NPROG, sch.nprog()); + if (scperc.read(_isequal) == NOERR) + _causale = scperc.get_int(SPR_CODCAUS); +} + +void TGenera::arrotonda() +{ + TString16 filt; + real importo = ZERO; + + TRelation* rl; + TCursor* cl; + + filt.format("CODDITTA=%ld", _codditta); + + rl = new TRelation(LF_QUAL); + cl = new TCursor(rl,filt,1); + TRecnotype cl_items = cl->items(); + cl->freeze(); + + (*cl) = 0L; + + TString scritta(60); + scritta.format("Arrotondamento ritenute versate per la ditta %ld", _codditta); + TProgind progn(cl_items, scritta, FALSE, TRUE); + TLocalisamfile& fl = cl->file(); + + for (int i = 0; i < cl_items; i++, ++(*cl)) + { + progn.addstatus(1); + importo = fl.get_real(QUL_QLRITVER); + importo = round_770(importo); + fl.put(QUL_QLRITVER, importo); + fl.rewrite(); + } +} + +bool TGenera::genera_riga(TCursor* cur) +{ + TLocalisamfile ql (LF_QUAL); + TLocalisamfile rver(LF_RVER); + real riteff,ritver; + long numvers,codanagr,codp; + char tipoa,tipop; + int nprog,nprogp; + bool prima_volta = TRUE; + bool gia_fatto = FALSE; + TString perc,percp; + + (*cur) = 0L; + TRecnotype items_rpag = cur->items(); + TString scritta(60); + scritta.format("Generazione versamenti per la ditta %ld", _codditta); + TProgind progn(items_rpag, scritta, FALSE, TRUE); + + riteff = ZERO; + ritver = ZERO; + + _righe_gia_presenti = new TVersamenti; + _righe_gia_presenti->destroy(); + + tipop = 'Z'; + codp = 99999; + nprogp = 9999; + + TSchedaP scheda_prec; + for (int i = 0; i < items_rpag; i++, ++(*cur), progn.addstatus(1)) + { +// Leggo i dati su RPAG + TDate datapag(cur->curr().get(PAG_DATAPAG)); + _mesepag = datapag.month();; + _annopag = datapag.year(); + riteff = cur->curr().get_real(PAG_RITENUTA); + numvers = cur->curr().get_long(PAG_NUMVERS); + tipoa = cur->curr().get_char(PAG_TIPOA); + codanagr = cur->curr().get_long(PAG_CODANAGR); + nprog = cur->curr().get_int (PAG_NPROG); + + TSchedaP scheda_corr(_codditta, tipoa, codanagr, nprog); + dati_rver(rver,scheda_corr,numvers); + + if (scheda_corr != scheda_prec) + { + dati_scperc(scheda_corr); + causale(_causale); + } + scheda_prec.set(_codditta,tipoa,codanagr,nprog); + +// Se e' tributo1015 posso evitare di controllare il codice quadro + if (!_ver1015) + { + if (_codqua != "C" && _codqua != "D" && _codqua != "D1" && + _codqua != "E" && _codqua != "E1") + continue; + } + else + if (!gia_fatto) + { + gia_fatto = TRUE; + const int cp = controllo_parametri(); + if (cp == CHANGED) + dati_rver(rver,scheda_corr,numvers); + else + if (cp == ESCI) + return FALSE; // ho premuto il bottone FINE + } + + ql.setkey(1); + ql.zero(); + ql.put(QUL_CODDITTA, _codditta); + ql.put(QUL_QLMP, _mesepag); + ql.put(QUL_QLAP, _annopag); + ql.put(QUL_QLDV, _datavers); + ql.put(QUL_QLLV, _luovers); + ql.put(QUL_QLTV, _tipover); + + if (_ver1015) + { + ql.put(QUL_QLCT, _ct1015); + ql.put(QUL_QLAB, _ab1015); + ql.put(QUL_QLCODQUA, _cq1015); + } + else + { + ql.put(QUL_QLCT, _codtrib); + ql.put(QUL_QLAB, _artbil); + ql.put(QUL_QLCODQUA, _codqua); + } + ql.put(QUL_QLSERIE, _serie); + ql.put(QUL_QLNUMERO, _numero); + TRectype dep(ql.curr()); + + if (ql.read(_isequal, _lock) == NOERR) + { + _riteff = ql.get_real(QUL_QLRITEFF); + _riteff += riteff; + ql.put(QUL_QLRITEFF, _riteff); + + if (!_righe_gia_presenti->find(scheda_corr,numvers)) + { + ritver = ql.get_real(QUL_QLRITVER); + ritver += _ritver; + ql.put(QUL_QLRITVER, ritver); + } + ql.rewrite(); + } + else + { + ql.zero(); + ql.curr() = dep; + ql.put(QUL_QLRITEFF, riteff); + ql.put(QUL_QLRITVER, _ritver); + ql.write(); + } + _righe_gia_presenti->set(scheda_corr,numvers); + } + + return TRUE; +} + + +class TGenera_versamenti : public TApplication +{ + char _liv; + TString16 _section; + TConfig* _cnf; + public: + TGenera* _genera; + TLocalisamfile *_rver, *_rpag, *_base, *_scperc, *_ql; + public: + virtual bool create(); + virtual bool menu(MENU_TAG m); + virtual bool destroy(); + + TGenera& genera() { return *_genera; } + + public: + TGenera_versamenti(char livello = 'S') : _liv(toupper(livello)) {} + ~TGenera_versamenti() {} +}; + +TGenera_versamenti& app() { return (TGenera_versamenti&)main_app(); } + +bool TGenera_versamenti::menu(MENU_TAG m) +{ + long codditta, codditta_prec; + int i = 0; + TConfig cnf_user(CONFIG_USER); + + if (m == BAR_ITEM(1)) + { + codditta_prec = get_firm_770(); + while ((codditta = cnf_user.get_long(DITTE_SEL, _section, i++)) != 0L) + { + set_firm_770(codditta); + if (!_genera->set(codditta, _cnf, _section)) + break; + } + set_firm_770(codditta_prec); + return FALSE; + } + + return FALSE; +} + +bool TGenera_versamenti::create() +{ + TApplication::create(); + _rver = new TLocalisamfile(LF_RVER); + _rpag = new TLocalisamfile(LF_RPAG); + _scperc = new TLocalisamfile(LF_SCPERC); + _base = new TLocalisamfile(LF_BASE); + _ql = new TLocalisamfile(LF_QUAL); + _genera = new TGenera('s'); + _cnf = new TConfig(CONFIG_STUDIO); + + _section = name(); + _section.cut(2); + + dispatch_e_menu (BAR_ITEM(1)); + return TRUE; +} + +bool TGenera_versamenti::destroy() +{ + delete _rver; + delete _rpag; + delete _scperc; + delete _base; + delete _ql; + delete _genera; + delete _cnf; + return TApplication::destroy(); +} + +int m74100 (int argc, char* argv[]) +{ + TGenera_versamenti a(*argv[2]); + a.run(argc, argv, "Generazione versamenti"); + return 0; +} + diff --git a/m770/774100.h b/m770/774100.h index 1ad719dab..4480ce908 100755 --- a/m770/774100.h +++ b/m770/774100.h @@ -1,55 +1,55 @@ -#ifndef __774100_H -#define __774100_H - -#include -#include "77lib.h" - -// Usato in generazione per evitare di leggere due volte lo stesso versamento -class TVersamenti : public TAssoc_array -{ - TString80 _key; - public: - bool find (TSchedaP& sch, const long numvers); - void set (TSchedaP& scheda, const long numvers); - - TVersamenti() {} -}; - -bool filter_func(const TRelation *); - -class TGenera -{ - friend bool filter_func(const TRelation *); - - TVersamenti* _righe_gia_presenti; - - TRecnotype _items_rpag; - int _annodic,_annopag,_mesepag,_causale,_artbil; - int _ab1015, _ct1015, _codtrib; - long _codditta; - real _riteff,_ritver; - TDate _datavers; - char _luovers,_tipover; - TString _serie,_numero,_codqua,_cq1015,_rss,_note,_sNprog; - bool _ver1015; - - bool azzera_quadroL(); - bool causale1015 (int codcaus); - void causale (int causale); - void genera_riga (TCursor*); - void dati_rver (TLocalisamfile&, TSchedaP& scheda, long numvers); - void dati_scperc (TSchedaP& scheda); - int controllo_parametri(); - -public: - bool set(const long codditta, TConfig* cnf, const char* section="77"); - void arrotonda(); - - TGenera() : _annodic(0),_annopag(0),_mesepag(0),_causale(0),_artbil(0), - _ab1015(0), _ct1015(0), _codtrib(0) {} - - virtual ~TGenera() {} -}; - -#endif - +#ifndef __774100_H +#define __774100_H + +#include +#include "77lib.h" + +// Usato in generazione per evitare di leggere due volte lo stesso versamento +class TVersamenti : public TAssoc_array +{ + TString80 _key; + public: + bool find (TSchedaP& sch, const long numvers); + void set (TSchedaP& scheda, const long numvers); + + TVersamenti() {} +}; + +bool filter_func(const TRelation *); + +class TGenera +{ + friend bool filter_func(const TRelation *); + + TVersamenti* _righe_gia_presenti; + + TRecnotype _items_rpag; + int _annodic,_annopag,_mesepag,_causale,_artbil; + int _ab1015, _ct1015, _codtrib; + long _codditta; + real _riteff,_ritver; + TDate _datavers; + char _luovers,_tipover,_liv; + TString _serie,_numero,_codqua,_cq1015,_rss,_note,_sNprog; + bool _ver1015; + + bool azzera_quadroL(); + bool causale1015 (int codcaus); + void causale (int causale); + bool genera_riga (TCursor*); + void dati_rver (TLocalisamfile&, TSchedaP& scheda, long numvers); + void dati_scperc (TSchedaP& scheda); + int controllo_parametri(); + +public: + bool set(const long codditta, TConfig* cnf, const char* section="77"); + void arrotonda(); + + TGenera(char livello) : _liv(toupper(livello)),_annodic(0),_annopag(0), + _mesepag(0),_causale(0),_artbil(0),_ab1015(0), _ct1015(0), _codtrib(0) {} + + virtual ~TGenera() {} +}; + +#endif + diff --git a/m770/776300.cpp b/m770/776300.cpp index f5ae7fc42..54bbb3091 100755 --- a/m770/776300.cpp +++ b/m770/776300.cpp @@ -424,13 +424,16 @@ void TSelezioneDich::build_nomiditte() for (_nditte->first(); !_nditte->eof(); _nditte->next()) { - prg.addstatus(1); - _n_ditte++; - TToken_string* d = new TToken_string(64); - d->add(" "); // spazio per la selezione - d->add(dt.get("CODDITTA")); - d->add(dt.get("RAGSOC")); - _nomiditte.add(d); + prg.addstatus(1); + if (exist_dichiar_770(dt.get_long("CODDITTA"))) + { + _n_ditte++; + TToken_string* d = new TToken_string(64); + d->add(" "); // spazio per la selezione + d->add(dt.get("CODDITTA")); + d->add(dt.get("RAGSOC")); + _nomiditte.add(d); + } } } diff --git a/m770/776500.cpp b/m770/776500.cpp index 5b3166d38..ca77162aa 100755 --- a/m770/776500.cpp +++ b/m770/776500.cpp @@ -12,6 +12,21 @@ #include "776.h" #include "776500.h" #include "77lib.h" + +// derivazione della classe Tmask per reimplementare +// la funzione membro can_be_closed() in modo da poter +// avvertire l'utente in caso di pressione del tasto ALT+F4 +class TMaskDerived : public TMask +{ + +public: + // @cmember Controlla se la maschera puo' essere chiusa (TRUE se puo' esserlo) + virtual bool can_be_closed() const; + // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) + TMaskDerived(const char* title) : TMask(title) {}; + // @cmember Distruttore + virtual ~TMaskDerived(){}; +}; class TParametri_genera : public TApplication { @@ -37,9 +52,19 @@ class TParametri_genera : public TApplication HIDDEN TParametri_genera& app() { return (TParametri_genera&) main_app(); } +// implementazione della funzione TMaskDerived::can_be_closed() +// per segnalare all'utente l'interruzione del processo di generazione +bool TMaskDerived::can_be_closed() const +{ + bool ok = TRUE; + if (is_running()) + ok = yesno_box("Annullare la generazione dei versamenti?"); + return ok; +} + void TParametri_genera::on_config_change() { - TConfig conf(_liv == 'S' ? CONFIG_USER : CONFIG_STUDIO); + TConfig conf(CONFIG_STUDIO); _anno_dic = (int)conf.get_long(ANNO_SEL, _section); } @@ -61,90 +86,45 @@ KEY TParametri_genera::registra(TMask& m, bool check_dirty) bool TParametri_genera::main_loop() { - long codditta, codditta_prec; + long codditta; int i = 0; KEY tasto; - TMask msk("776500a"); - msk.open_modal(); - - // da dichiarazioni selezionate - if (_liv == 'S') - { - codditta_prec = get_firm_770(); - tasto = K_TAB; - - // loop di scansione dichiarazioni selezionate - while ((codditta = _cnf->get_long(DITTE_SEL, _section, i++)) != 0L - && tasto != K_QUIT) + + TMaskDerived msk("776500a"); + msk.open_modal(); + codditta = get_firm_770(); + _rel->lfile().put("CODDITTA", codditta); + _rel->read(); + msk.autoload(*_rel); + tasto = K_TAB; + _risposta = 0; + + // loop di gestione maschera + while (tasto != K_ESC && tasto != K_QUIT) + { + tasto = msk.run(); + switch (tasto) { - set_firm_770(codditta); - _rel->lfile().put("CODDITTA", codditta); - _rel->read(); - msk.autoload(*_rel); - tasto = K_TAB; - - // loop di gestione maschera - while (tasto != K_ESC && tasto != K_QUIT) - { - tasto = msk.run(); - switch (tasto) - { - case K_ESC: - if (registra(msk,TRUE) == K_ESC) - tasto = K_TAB; - break; - case K_QUIT: - if (registra(msk,TRUE) == K_ESC) - tasto = K_TAB; - break; - case K_SAVE: - registra(msk,FALSE); - default: - break; - } - } // endloop di gestione maschera - - } // endloop di scansione dichiarazioni selezionate - - set_firm_770(codditta_prec); - } - - // dalla manutenzione dichiarazione - else - { - codditta = get_firm_770(); - _rel->lfile().put("CODDITTA", codditta); - _rel->read(); - msk.autoload(*_rel); - tasto = K_TAB; - - // loop di gestione maschera - while (tasto != K_ESC && tasto != K_QUIT) - { - tasto = msk.run(); - switch (tasto) - { - case K_ESC: - if (registra(msk,TRUE) == K_ESC) - tasto = K_TAB; - _risposta = 1; - break; - case K_QUIT: - if (registra(msk,TRUE) == K_ESC) - tasto = K_TAB; - _risposta = 0; - break; - case K_SAVE: - registra(msk,FALSE); - _risposta = 1; - default: - break; - } - } // endloop di gestione maschera - } - - msk.close_modal(); + case K_ESC: + if (registra(msk,TRUE) == K_ESC) + tasto = K_TAB; + _risposta = 1; + break; + case K_QUIT: + if (yesno_box("Annullare la generazione dei versamenti?")) + _risposta = 0; + else tasto = K_TAB; + break; + case K_SAVE: + registra(msk,FALSE); + _risposta = 1; + default: + break; + } + } // endloop di gestione maschera + msk.close_modal(); + return FALSE; } @@ -163,17 +143,21 @@ bool TParametri_genera::create() bool TParametri_genera::destroy() { delete _rel; - delete _cnf; + delete _cnf; - if (_liv == 'D') - { - TString appname = "771mod -3"; - TString body = ""; - body << _risposta; - TMessage msg (appname,"",(const char*) body); - TMailbox mb; - mb.send(msg); - } + TString appname; + TString body = ""; + + if (_liv == 'D') + appname = "771mod -3"; + else + appname = "774 -0"; + + body << _risposta; + TMessage msg (appname,"",(const char*) body); + TMailbox mb; + mb.send(msg); + return TApplication::destroy(); } diff --git a/m770/776500a.uml b/m770/776500a.uml index 76f3eae39..527818699 100755 --- a/m770/776500a.uml +++ b/m770/776500a.uml @@ -13,13 +13,11 @@ END BUTTON DLG_CANCEL 10 2 BEGIN PROMPT -23 -1 "" -MESSAGE EXIT,K_ESC END BUTTON DLG_QUIT 10 2 BEGIN PROMPT -33 -1 "" -MESSAGE EXIT,K_QUIT END ENDPAGE diff --git a/m770/77_g_p2.uml b/m770/77_g_p2.uml index d359326c7..dbcc42ea4 100755 --- a/m770/77_g_p2.uml +++ b/m770/77_g_p2.uml @@ -31,9 +31,9 @@ BEGIN PROMPT -23 -1 "" END -BUTTON DLG_NULL 9 2 +BUTTON DLG_AZZERA 9 2 BEGIN - PROMPT -33 -1 "Azzera" + PROMPT -33 -1 "A~zzera" MESSAGE RESET,1@ END diff --git a/m770/77_g_p3.uml b/m770/77_g_p3.uml index 7a12d9969..967e57674 100755 --- a/m770/77_g_p3.uml +++ b/m770/77_g_p3.uml @@ -60,9 +60,9 @@ BEGIN PROMPT -23 -1 "" END -BUTTON DLG_NULL 9 2 +BUTTON DLG_AZZERA 9 2 BEGIN - PROMPT -33 -1 "Azzera" + PROMPT -33 -1 "A~zzera" MESSAGE RESET,1@ END diff --git a/m770/77base3.frm b/m770/77base3.frm index dd555f27a..90ae5e90f 100755 --- a/m770/77base3.frm +++ b/m770/77base3.frm @@ -1,5 +1,10 @@ USE 42 -JOIN 37 INTO CODDITTA=CODDITTA +JOIN 37 INTO CODDITTA=CODDITTA +JOIN 9 INTO CODDITTA==CODDITTA +JOIN 6 TO 9 ALIAS 106 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 106@ ALIAS 108 INTO CODANAGR=CODANAGR +JOIN 13 TO 108@ ALIAS 113 INTO COM==COMNASC +JOIN 13 TO 106@ ALIAS 213 INTO COM==COMRF(COMRES) END DESCRIPTION @@ -24,7 +29,7 @@ STRINGA 1 BEGIN KEY "Cod.Conc.1" PROMPT 41 1 "" - FIELD 37->L0CCONC1 + FIELD 213@->UFFCONC END STRINGA 2 diff --git a/m770/77g1a.h b/m770/77g1a.h index 138864ae2..ff42f262f 100755 --- a/m770/77g1a.h +++ b/m770/77g1a.h @@ -1,4 +1,5 @@ // 77qg1a.h #define F_CODDITTA 101 #define F_RAGDITTA 102 -#define F_PI 103 +#define F_PI 103 +#define DLG_AZZERA 150 diff --git a/m770/77g1pa.uml b/m770/77g1pa.uml index d4525c480..a21dffa53 100755 --- a/m770/77g1pa.uml +++ b/m770/77g1pa.uml @@ -60,9 +60,9 @@ BEGIN PROMPT -23 -1 "" END -BUTTON DLG_NULL 9 2 +BUTTON DLG_AZZERA 9 2 BEGIN - PROMPT -33 -1 "Azzera" + PROMPT -33 -1 "A~zzera" MESSAGE RESET,1@ END diff --git a/m770/77qn.uml b/m770/77qn.uml index 655418f26..deb081b38 100755 --- a/m770/77qn.uml +++ b/m770/77qn.uml @@ -43,7 +43,7 @@ BEGIN USE LF_QUAN INPUT CODDITTA QNF_CODDITTA SELECT INPUT NPROG QNF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Mese" MESERIF DISPLAY "Anno" ANNORIF DISPLAY "Imposta rimborsata" IMPOSTA diff --git a/m770/77qp.uml b/m770/77qp.uml index 460337791..9cd674b21 100755 --- a/m770/77qp.uml +++ b/m770/77qp.uml @@ -51,7 +51,7 @@ BEGIN USE LF_QUAP SELECT (CODDITTA=#QPF_CODDITTA) INPUT CODDITTA QPF_CODDITTA SELECT INPUT NPROG QPF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Imposta versata" IMPOSTA DISPLAY "Interessi dipendente" INTERDIP DISPLAY "Interessi datore di lavoro" INTERDAT diff --git a/m770/77qq.uml b/m770/77qq.uml index ef0abcef3..3ec489e6e 100755 --- a/m770/77qq.uml +++ b/m770/77qq.uml @@ -43,7 +43,7 @@ BEGIN USE LF_QUAQ SELECT (CODDITTA=#QQF_CODDITTA) INPUT CODDITTA QQF_CODDITTA SELECT INPUT NPROG QQF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Mese" MESEPAG DISPLAY "Anno" ANNOPAG DISPLAY "Contributo versato" CONTVERS diff --git a/m770/77qr.uml b/m770/77qr.uml index 2ce82f967..743053baf 100755 --- a/m770/77qr.uml +++ b/m770/77qr.uml @@ -43,7 +43,7 @@ BEGIN USE LF_QUAR SELECT (CODDITTA=#QRF_CODDITTA) INPUT CODDITTA QRF_CODDITTA SELECT INPUT NPROG QRF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Mese" MESERIF DISPLAY "Anno" ANNORIF DISPLAY "Imposta rimborsata" IMPRIMB diff --git a/m770/77qs.uml b/m770/77qs.uml index 57b495c7c..022c6215d 100755 --- a/m770/77qs.uml +++ b/m770/77qs.uml @@ -51,7 +51,7 @@ BEGIN USE LF_QUAS SELECT (CODDITTA=#QSF_CODDITTA) INPUT CODDITTA QSF_CODDITTA SELECT INPUT NPROG QSF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Imposta versata" IMPOSTA DISPLAY "Interessi dipendente" INTERDIP DISPLAY "Interessi datore di lavoro" INTERDAT diff --git a/m770/77qt.uml b/m770/77qt.uml index 900274edf..403ec9d43 100755 --- a/m770/77qt.uml +++ b/m770/77qt.uml @@ -43,7 +43,7 @@ BEGIN USE LF_QUAT SELECT (CODDITTA=#QTF_CODDITTA) INPUT CODDITTA QTF_CODDITTA SELECT INPUT NPROG QTF_NPROG - DISPLAY "N°" NPROG + DISPLAY "Num." NPROG DISPLAY "Mese" MESEPAG DISPLAY "Anno" ANNOPAG DISPLAY "Contributo versato" CONTVERS