diff --git a/cg/cg0400.cpp b/cg/cg0400.cpp index 7ecd0cf9f..d286593fe 100755 --- a/cg/cg0400.cpp +++ b/cg/cg0400.cpp @@ -1,1062 +1,1062 @@ -//******************************** -//* Riepilogo Progressivi IVA * -//******************************** -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "classpim.h" -#include "cg0.h" -#include "cg0400.h" - -HIDDEN TString80 TMP; - -enum liste { - visualizza=1, - stampa=2, -}; - -struct Importi { - real imponibile; - real imposta; -}; - -struct TRiga_gen : public TArray -{ - TString16 _codiva; - real _impoven, _imposven; //imponibile e imposta vendite - real _impoacq, _imposacq; //imponibile e imposta acquisti - real _impobd, _imposbd; //imponibile e imposta importazioni (ovvero bolle doganali) - - TRiga_gen (const char* codiva, const real& impov, const real& imposv, const real& impoa, const real& imposa, const real& impobd, const real& imposbd): - _codiva(codiva),_impoven(impov),_imposven(imposv),_impoacq(impoa),_imposacq(imposa),_impobd(impobd),_imposbd(imposbd) {} -}; - -class TGen_array : public TArray -{ -public: - bool add_riga(const char* codiva, const real& imponibilev, const real& impostav, const real& imponibilea, const real& impostaa, const real& imponibilebd, const real& impostabd); - TRiga_gen& riga(int i) { return (TRiga_gen&)(*this)[i]; } -}; - -bool TGen_array::add_riga(const char* codiva, const real& imponibilev, const real& impostav, const real& imponibilea, const real& impostaa, const real& imponibilebd, const real& impostabd) -{ - bool found = FALSE; - for (int i = 0; i < items(); i++) - { - TRiga_gen& r = riga(i); - if (r._codiva==codiva) - { - found = TRUE; - r._impoven += imponibilev; - r._imposven += impostav; - r._impoacq += imponibilea; - r._imposacq += impostaa; - r._impobd += imponibilebd; - r._imposbd += impostabd; - } - } - if (!found) - { - TRiga_gen* r = new TRiga_gen(codiva,imponibilev,impostav,imponibilea,impostaa,imponibilebd,impostabd); - add(r); - } - return found; -}; - -struct TRiga_iva : public TArray -{ - tiporec _tipo; - real _imponibile, _imposta, _detrazione; - - TRiga_iva (const tiporec& tipo, const real& impo, const real& impos, const real& detr): - _tipo(tipo),_imponibile(impo),_imposta(impos), _detrazione(detr) {} -}; - -class TIva_array : public TArray -{ -public: - bool add_riga(const tiporec& tipo, const real& imponibile, - const real& imposta, const real& detr); - TRiga_iva& riga(int i) { return (TRiga_iva&)(*this)[i]; } -}; - -bool TIva_array::add_riga(const tiporec& tipo, const real& imponibile, - const real& imposta, const real& detr) -{ - bool found = FALSE; - for (int i = 0; i < items(); i++) - { - TRiga_iva& r = riga(i); - if (r._tipo == tipo) - { - found = TRUE; - r._imponibile += imponibile; - r._imposta += imposta; - r._detrazione += detr; - } - } - if (!found) - { - TRiga_iva* r = new TRiga_iva(tipo,imponibile,imposta,detr); - add(r); - } - return found; -}; - -class CG0400_application : public TPrintapp -{ - TTable* _tabpim, * _tabreg, * _tabais, * _tablia; - TLocalisamfile* _nditte, * _anag, * _com, * _attiv; - TMask* _msk; - TDate _data; - int _sospmsk, _tipoprog, _livelloprog, _tipo_aliq, _tipo_attiv, _annoiva, _i; - int _mese, _anno; - bool _st_inizio_anno, _prima_pagina; - TIva_array _iva_array,_iva1_array; - TGen_array _gen_array,_gen1_array; - TString _cap,_cofi,_paiva,_ragsoc,_comunefis,_provfis,_viafis,_codivamsk,_codattmsk; - TString _datast, _cod_att; - Importi _mesi[13]; - liste _tipo_lista; - -public: - - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int); - virtual void preprocess_header(); - virtual bool preprocess_page(int,int); - virtual print_action postprocess_page(int,int); - - void cerca_i_pim(); - void azzera_mesi(); - void get_dati_ditta(); - void setta_intestazione(); - void calcola_totali(real&,real&); - void cerca_tipo(TIva_array&, tiporec, real&, real&, real&); - void prospetto_pagina(TGen_array&, TIva_array&); - int stampa_intestazione_ditta(); - const char* desc_attivita(const char*); - const char* desc_iva(const char*); - char look_lia(long ditta = 0l); - void look_pim(); - - CG0400_application(){}; -}; - -HIDDEN int compare_rows(const TObject** o1, const TObject** o2) -{ - TRiga_gen* r1 = (TRiga_gen*)*o1; - TRiga_gen* r2 = (TRiga_gen*)*o2; - - return (strcmp((const char*)r1->_codiva, (const char*)r2->_codiva)); -} - -const char* CG0400_application::desc_attivita(const char* codatt) -{ - TTable attiv ("%AIS"); - attiv.zero(); - attiv.put("CODTAB", codatt); - if (attiv.read()==NOERR) - TMP = attiv.get("S0"); - else - TMP = ""; - return TMP; -} - -const char* CG0400_application::desc_iva(const char* cod) -{ - TTable tab_iva("%IVA"); - TString codtab(format("%-4s", cod)); - - tab_iva.zero(); - tab_iva.put("CODTAB", codtab); - if (tab_iva.read()==NOERR) - TMP = tab_iva.get("S0"); - else - TMP = ""; - - return TMP; -} - -char CG0400_application::look_lia(long ditta) -{ - if (ditta == 0l) ditta = get_firm(); - - TString16 y; y.format("%05ld%04d", ditta, _anno); - - _tablia->zero(); - _tablia->put("CODTAB", y); - - if (_tablia->read() != NOERR) - _tablia->zero(); - - return _tablia->get_char("S7"); -} - -bool CG0400_application::user_create() -{ - _tabpim = new TTable(TAB_PIM); - _tabreg = new TTable(TAB_REG); - _tabais = new TTable("%AIS"); - _tablia = new TTable("%LIA"); - _anag = new TLocalisamfile(LF_ANAG); - _nditte = new TLocalisamfile(LF_NDITTE); - _com = new TLocalisamfile(LF_COMUNI); - _attiv = new TLocalisamfile(LF_ATTIV); - - set_real_picture("###.###.###.###"); - set_print_zero(FALSE); - printer().footerlen(5); - - return TRUE; -} - -bool CG0400_application::user_destroy() -{ - delete _tabpim; - delete _tabreg; - delete _tabais; - delete _tablia; - delete _anag; - delete _nditte; - delete _com; - delete _attiv; - - return TRUE; -} - -void CG0400_application::azzera_mesi() -{ - for (int i=0; i<=12; i++) - { - _mesi[i].imponibile = ZERO; - _mesi[i].imposta = ZERO; - } -} - -void CG0400_application::look_pim() -{ - TTable pim("PIM"); - for (pim.first(); !pim.eof(); pim.next()) - { - real imponibile, imposta; - tiporec tipo; - - TString80 codtab = pim.get("CODTAB"); - int anno = atoi(codtab.mid(0,4)); - int mese = atoi(codtab.mid(13,2)); - TString16 codatt = codtab.mid(4,5); - TString16 codiva = codtab.mid(16,4); - TString16 tipoiva = pim.get("S5"); - codiva = codiva.trim(); - codatt = codatt.trim(); - - if (anno != _anno) continue; - - if (_st_inizio_anno) - if (mese > _mese) - continue; - - if (!_st_inizio_anno) - if (mese != _mese) - continue; - - if (codatt != _cod_att) continue; - - //Modifica del 12/07/1995 - if (tipoiva == "VE") continue; //i codici iva di tipo "VE" - //Fine //non devono essere stampati - - while (classify_pim(pim.curr(), imponibile, imposta, tipo)) - { - switch(tipo) - { - case acq_norm: - _gen_array.add_riga(codiva,ZERO,ZERO,imponibile,imposta,ZERO,ZERO); - if (_st_inizio_anno && mese == _mese) //lo metto in un array a parte - _gen1_array.add_riga(codiva,ZERO,ZERO,imponibile,imposta,ZERO,ZERO); - break; - case vend_norm: - _gen_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); - if (_st_inizio_anno && mese == _mese) //lo metto in un array a parte - _gen1_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); - break; - case bolle_doganali: - _gen_array.add_riga(codiva,ZERO,ZERO,ZERO,ZERO,imponibile,imposta); - if (_st_inizio_anno && mese == _mese) - _gen1_array.add_riga(codiva,ZERO,ZERO,ZERO,ZERO,imponibile,imposta); - break; - case acq_amm_ultdetr: - { - real detr = imponibile * real(0.06); - _iva_array.add_riga(tipo,imponibile,imposta,detr); - if (_st_inizio_anno && mese == _mese) - _iva1_array.add_riga(tipo,imponibile,imposta,detr); - } - break; - default: - _iva_array.add_riga(tipo,imponibile,imposta,ZERO); - if (_st_inizio_anno && mese == _mese) - _iva1_array.add_riga(tipo,imponibile,imposta,ZERO); - break; - } - } - } - _gen_array.sort(compare_rows); // ordinamento per codice iva - _gen1_array.sort(compare_rows); // ordinamento per codice iva -} - -void CG0400_application::cerca_i_pim() -{ - TTable pim("PIM"); - for (pim.first(); !pim.eof(); pim.next()) - { - real imponibile, imposta, impo, impos; - tiporec tipo; - - TString80 codtab = pim.get("CODTAB"); - int anno = atoi(codtab.mid(0,4)); - TString16 codatt = codtab.mid(4,5); - int mese = atoi(codtab.mid(13,2)); - TString16 codiva = codtab.mid(16,4); - TString16 tipoiva = pim.get("S5"); - - if (anno != _annoiva) continue; - - //Modifica del 12/07/1995 - if (tipoiva == "VE") continue; - //Fine - - if (_livelloprog == 1) //riepilogo per aliquota - { - codiva = codiva.trim(); - if (codiva != _codivamsk) continue; - } - - if (_livelloprog == 2) //riepilogo per attivita' - { - codatt = codatt.trim(); - if (codatt != _codattmsk) continue; - } - - impo = impos = ZERO; - - while (classify_pim(pim.curr(), imponibile, imposta, tipo)) - { - switch(tipo) - { - case acq_norm: - if (_tipoprog == 1) break; //vendite - if (_tipo_aliq == 1) //nella maschera e' stato richiesto - { //acquisti in genere - impo += imponibile; - impos += imposta; - } - break; - case vend_norm: - if (_tipoprog == 2) break; //acquisti - if (_sospmsk == 1) //nella maschera e' stato richiesto - { //vendite in genere - impo += imponibile; - impos += imposta; - } - break; - case vend_simp: - if (_tipoprog == 2) break; //acquisti - if (_sospmsk == 2) //nella maschera e' stato richiesto - { //vendite in sospensione d'imposta - impo += imponibile; - impos += imposta; - } - break; - case acq_ind_op_es: - if (_tipoprog == 1) break; - if (_tipo_aliq == 2) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_ind_pass_int: - if (_tipoprog == 1) break; - if (_tipo_aliq == 3) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_ind_art_19: - if (_tipoprog == 1) break; - if (_tipo_aliq == 4) - { - impo += imponibile; - impos += imposta; - } - break; - case base_ventilazione: - if (_tipoprog == 1) break; - if (_tipo_aliq == 5) - { - impo += imponibile; - impos += imposta; - } - break; - case bolle_doganali: - if (_tipoprog == 1) break; - if (_tipo_aliq == 6) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_simp: - if (_tipoprog == 1) break; - if (_tipo_aliq == 7) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_beni_riv: - if (_tipoprog == 1) break; - if (_tipo_attiv == 1) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_beni_ammort: - if (_tipoprog == 1) break; - if (_tipo_attiv == 2) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_beni_ammort_nd: - if (_tipoprog == 1) break; - if (_tipo_attiv == 3) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_beni_leasing: - if (_tipoprog == 1) break; - if (_tipo_attiv == 4) - { - impo += imponibile; - impos += imposta; - } - break; - case acq_amm_ultdetr: - if (_tipoprog == 1) break; - if (_tipo_attiv == 5) - { - impo += imponibile; - impos += imposta; - } - break; - case cess_amm: - if (_tipoprog == 2) break; - if (_livelloprog == 2) //Nel caso di vendite per attivita' il tipo costo/ricavo - { //viene forzato a 4 => cessione beni ammortizzabili - impo += imponibile; - impos += imposta; - } - default: - break; - } - } //fine while - _mesi[mese].imponibile += impo; - _mesi[mese].imposta += impos; - impo = impos = ZERO; - } -} - - -bool CG0400_application::set_print(int m) -{ - TString16 masc = ""; - - switch(m) - { - case 1: - masc = "cg0400a"; - _tipo_lista = visualizza; - break; - case 2: - masc = "cg0400b"; - _tipo_lista = stampa; - break; - default: - break; - } - - TMask msk(masc); - - if (msk.run() != K_ENTER) return FALSE; - - switch (_tipo_lista) - { - case visualizza: - { - _sospmsk = _tipo_aliq = _tipo_attiv = 0; - _annoiva = msk.get_int(F_ANNO); - _tipoprog = msk.get_int(F_TIPO); // 1 <=> vendite; 2 <=> acquisti - _livelloprog = msk.get_int(F_LIVELLO); // 1 <=> aliquota; 2 <=> attivita' - _codivamsk = msk.get(F_CODIVA); - _codattmsk = msk.get(F_ATTIVITA); - if (_livelloprog == 1 && _tipoprog == 2) - _tipo_aliq = msk.get_int(F_TIPOTABE); - if (_livelloprog == 2 && _tipoprog == 2) - _tipo_attiv = msk.get_int(F_TIPOTABEL); - if (_tipoprog == 1 && _livelloprog == 1) - _sospmsk = msk.get_int(F_TIPOTAB); //vendite in genere; vendite in sospensione d'imposta - - setta_intestazione(); - azzera_mesi(); - cerca_i_pim(); - } - break; - case stampa: -{ - _anno = msk.get_int(F_ANNO); - _datast = msk.get(F_DATASTAMPA); - _mese = msk.get_int(F_MESE); - _st_inizio_anno = msk.get_bool(F_STAMPA); - - TLocalisamfile attiv(LF_ATTIV); - attiv.zero(); - attiv.put(ATT_CODDITTA, get_firm()); - TRectype r(attiv.curr()); - //prospetto per ogni codice attivita' della ditta - for(attiv.read(_isgteq); !attiv.eof(); attiv.next()) - { - if (attiv.curr() != r) break; - - _cod_att = attiv.get("CODATT"); - _prima_pagina = TRUE; - - _iva_array.destroy(); - _iva1_array.destroy(); - _gen_array.destroy(); - _gen1_array.destroy(); - - look_pim(); - - print(); - } - return FALSE; -} -break; -default: -break; -} - -//set_real_picture("###.###.###.###"); -//set_print_zero(FALSE); -//printer().footerlen(5); - -return TRUE; -} - -void CG0400_application::calcola_totali(real& imp, real& imps) -{ - for (int i=0; i<=12; i++) - { - imp += _mesi[i].imponibile; - imps += _mesi[i].imposta; - } -} - -void CG0400_application::cerca_tipo(TIva_array& iva_array,tiporec t, - real& imp, real& imps, real& det) -{ - int k = 0; - bool trovato = FALSE; - imp = imps = det = ZERO; - while ( k < iva_array.items() && !trovato) - { - TRiga_iva& riga = (TRiga_iva&)iva_array[k]; - if (t == riga._tipo) - trovato = TRUE; - else k++; - } - if (trovato) - { - TRiga_iva& riga = (TRiga_iva&)iva_array[k]; - imp = riga._imponibile; - imps = riga._imposta; - det = riga._detrazione; - } -} - -bool CG0400_application::preprocess_page(int file, int counter) -{ - reset_print(); - - switch (_tipo_lista) - { - case stampa: - { - if (!_st_inizio_anno) - prospetto_pagina(_gen_array,_iva_array); - else - { - if (_prima_pagina) - prospetto_pagina(_gen1_array,_iva1_array); - else - { - printer().formfeed(); - prospetto_pagina(_gen_array,_iva_array); - } - } - } - break; - case visualizza: -{ - if (counter) - _i++; - else - _i = 1; - - const char* mese = itom(_i); - set_row(1,"%s", mese); - set_row(1,"@26g%r", &_mesi[_i].imponibile); - set_row(1,"@56g%r", &_mesi[_i].imposta); - if (_i == 12) - { - real tot_impo = ZERO; - real tot_imposta = ZERO; - calcola_totali(tot_impo, tot_imposta); - TString dep = ""; - set_row(2,(const char*) dep); - set_row(3,"@8gTotale"); - set_row(3,"@26g%r", &tot_impo); - set_row(3,"@56g%r", &tot_imposta); - } -} -break; -default: -break; -} -return TRUE; -} - -void CG0400_application::prospetto_pagina(TGen_array& gen, TIva_array& iva) -{ - real t_impov,t_imposv,t_impoa,t_imposa,t_impobd,t_imposbd; - t_impov = t_imposv = t_impoa = t_imposa = t_impobd = t_imposbd = ZERO; - int r = 1; - - set_row(++r, "Cod.@40gVENDITE@77gACQUISTI@113gIMPORTAZIONI"); - set_row(++r, "IVA Descrizione@29gImponibile@48gImposta@67gImponibile@86gImposta@105gImponibile@124gImposta"); - r+=2; - - for (int k = 0; k < gen.items(); k++) - { - TRiga_gen& riga = (TRiga_gen&)gen[k]; - TString80 descr = desc_iva(riga._codiva); - if (riga._impoven != ZERO) - set_row(r, "@24g%r", &riga._impoven); - if (riga._imposven != ZERO) - set_row(r, "@40g%r", &riga._imposven); - if (riga._impoacq != ZERO) - set_row(r, "@62g%r", &riga._impoacq); - if (riga._imposacq != ZERO) - set_row(r, "@78g%r", &riga._imposacq); - if (riga._impobd != ZERO) - set_row(r, "@100g%r", &riga._impobd); - if (riga._imposbd != ZERO) - set_row(r, "@116g%r", &riga._imposbd); - if (riga._impoven != ZERO || riga._imposven != ZERO || riga._impoacq != ZERO - || riga._imposacq != ZERO || riga._impobd != ZERO || riga._imposbd != ZERO) - { - set_row(r, "@0g%-4s", (const char*)riga._codiva); - set_row(r, "@5g%-.18s", (const char*)descr); - r++; - } - - t_impov += riga._impoven; - t_imposv += riga._imposven; - t_impoa += riga._impoacq; - t_imposa += riga._imposacq; - t_impobd += riga._impobd; - t_imposbd += riga._imposbd; - } - - gen.destroy(); - - r+=2; - set_row(r++, "Totale@24g%r@40g%r@62g%r@78g%r@100g%r@116g%r", - &t_impov,&t_imposv,&t_impoa,&t_imposa,&t_impobd,&t_imposbd); - r++; - real im, is, d; //inizializzati in cerca_tipo() - cerca_tipo(iva,acq_ind_op_es,im,is,d); - t_impoa += im; - t_imposa += is; - bool st_riga = FALSE; - if (im != ZERO || is != ZERO) - { - set_row(r++, "Totali acquisti indeducibili su ricavi esenti@62g%r@78g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_ind_art_19,im,is,d); - t_impoa += im; - t_imposa += is; - if (im != ZERO || is != ZERO) - { - set_row(r++, "Totali acquisti indeducibili per ART.19@62g%r@78g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_ind_pass_int,im,is,d); - t_impoa += im; - t_imposa += is; - if (im != ZERO || is != ZERO) - { - set_row(r++, "Totali acquisti indeducibili per passaggi interni@62g%r@78g%r", &im, &is); - st_riga = TRUE; - } - r+=2; - if (st_riga) - set_row(r++, "Totale generale IVA@24g%r@40g%r@62g%r@78g%r@100g%r@116g%r", - &t_impov,&t_imposv,&t_impoa,&t_imposa,&t_impobd,&t_imposbd); - r+=3; - int kk = r; - /* - set_row(r++, "ALTRI DATI RELATIVI ALLA DICHIARAZIONE@54gImponibile@74gImposta@91gDetrazione"); - r++; - */ - r+=2; - - st_riga = FALSE; - cerca_tipo(iva,acq_simp,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Acquisti in sospensione d'imposta@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,vend_simp,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Vendite in sospensione d'imposta@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,cess_amm,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Cessione beni ammortizzabili@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_beni_riv,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Acquisto beni destinati alla rivendita@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_beni_ammort,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Acquisto beni ammortizzabili iva detraibile@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_beni_ammort_nd,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Acquisto beni ammortizzabili iva non detraibile@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_beni_leasing,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Altri beni strumentali acquisiti in leasing@49g%r@66g%r", &im, &is); - st_riga = TRUE; - } - cerca_tipo(iva,acq_amm_ultdetr,im,is,d); - if (im != ZERO || is != ZERO) - { - set_row(r++, "Acquisto beni soggetti a detrazione (6%%)@49g%r@66g%r@86g%r", &im, &is, &d); - st_riga = TRUE; - } - if (st_riga) - set_row(kk, "ALTRI DATI RELATIVI ALLA DICHIARAZIONE@54gImponibile@74gImposta@91gDetrazione"); - - iva.destroy(); -} - -TRectype& look_com (const char* cod, TLocalisamfile *comuni) -{ - comuni->zero(); - comuni->put(COM_COM, cod); - comuni->read(); - if (comuni->bad()) - comuni->zero(); - - return comuni->curr(); -} - -void CG0400_application::get_dati_ditta() -{ - TLocalisamfile nditte(LF_NDITTE); - TLocalisamfile anag(LF_ANAG); - TString codanagr; - TString tipoa; - - nditte.zero(); - nditte.put(NDT_CODDITTA, get_firm()); - nditte.read(); - - if (nditte.bad()) nditte.zero(); - - codanagr = nditte.get(NDT_CODANAGR); - tipoa = nditte.get(NDT_TIPOA); - _ragsoc = nditte.get(NDT_RAGSOC); - - anag.setkey(1); - anag.zero(); - anag.put (ANA_TIPOA, tipoa); - anag.put (ANA_CODANAGR, codanagr); - anag.read(); - if (anag.bad()) anag.zero(); - - _cofi = anag.get(ANA_COFI); - _paiva = anag.get(ANA_PAIV); - _comunefis = anag.get(ANA_COMRF); - - if (_comunefis.empty()) - _comunefis = anag.get(ANA_COMRES); - - TRectype dep = look_com (_comunefis, _com); - - _comunefis = dep.get(COM_DENCOM); - _provfis = dep.get(COM_PROVCOM); - _cap = dep.get(COM_CAPCOM); - if (_comunefis.empty()) - { - _viafis = anag.get(ANA_INDRF); - _viafis.rtrim(); - _viafis << " " << anag.get (ANA_CIVRF); - } - else - { - _viafis = anag.get(ANA_INDRES); - _viafis.rtrim(); - _viafis << " " << anag.get (ANA_CIVRES); - } -} - -int CG0400_application::stampa_intestazione_ditta() -{ - int r = 1; - TString codice_ditta; - TString riga(132); - - get_dati_ditta(); - codice_ditta << get_firm(); - - set_header (r, "Ditta %s %s %s %s %s %s", (const char*)codice_ditta, - (const char*)_ragsoc, (const char*)_viafis, - (const char*)_cap, (const char*)_comunefis, - (const char*)_provfis); - r++; - riga = "Data @< Pag. @#"; - riga.right_just(127); - riga.overwrite (format ("Partita iva %s Codice fiscale %s", (const char*)_paiva, (const char*)_cofi)); - set_header (r, "%s", (const char*) riga); - r+=3; - - return r; -} - -void CG0400_application::setta_intestazione() -{ - int r = 1; - - reset_header(); - - r = stampa_intestazione_ditta(); - - if (_livelloprog == 1) - set_header(r++, "Gestione Iva@b@50gPROGRESSIVI IVA PER ALIQUOTA"); - else set_header(r++, "Gestione Iva@b@50gPROGRESSIVI IVA PER ATTIVITA'"); - r++; - set_header(r++, "Anno liquidazione %d", _annoiva); - if (_tipoprog == 1) //vendite - { - if (_livelloprog == 1) - { - if (_sospmsk == 1) - set_header(r, "Vendite in genere"); - else set_header(r, "Vendite in sospensione d'imposta"); - } - else set_header(r, "Cessione beni da ammortizzare"); - } - else //acquisti - { - if (_livelloprog == 1) //per codice iva - switch (_tipo_aliq) - { - case 1: - set_header(r, "Acquisti in genere"); - break; - case 2: - set_header(r, "Acquisti indetraibili su operazioni esenti"); - break; - case 3: - set_header(r, "Acquisti indetraibili passaggi interni"); - break; - case 4: - set_header(r, "Acquisti indetraibili art.19"); - break; - case 5: - set_header(r, "Acquisti base di calcolo per la ventilazione"); - break; - case 6: - set_header(r, "Bolle doganali"); - break; - case 7: - set_header(r, "Acquisti in sospensione d'imposta"); - break; - default: - break; - } - else //per attivita' - switch (_tipo_attiv) - { - case 1: - set_header(r, "Acquisti beni per rivendita"); - break; - case 2: - set_header(r, "Acquisti beni da ammortizzare detraibili"); - break; - case 3: - set_header(r, "Acquisti beni da ammortizzare non detraibili"); - break; - case 4: - set_header(r, "Altri beni strumentali acquisiti in leasing"); - break; - case 5: - set_header(r, "Acquisti beni da ammortizzare ult.detr. 6%"); - break; - default: - break; - } - } - r++; - if (_livelloprog == 1) - set_header(r++, "IVA %s",(const char*) _codivamsk); - else set_header(r++, "ATTIVITA' %s",(const char*)_codattmsk); - set_header(++r, "@29gImponibile@60gImposta"); -} - -void CG0400_application::preprocess_header() -{ - if (_tipo_lista == stampa) - { - int soh = 1; - TString sep(132); - TString ragsoc(50); - //TString attprev(5); - TString16 descf; - - TLocalisamfile nditte(LF_NDITTE); - nditte.zero(); - nditte.put(NDT_CODDITTA, get_firm()); - if (nditte.read() == NOERR) - { - ragsoc = nditte.get(NDT_RAGSOC); - //attprev = nditte.get(NDT_CODATTPREV); - } - - //TString80 descr = desc_attivita(attprev); - - TString80 descr = desc_attivita(_cod_att); - - reset_header(); - - char f = look_lia(); - if (f == 'T') - descf = " TRIMESTRALE"; - else if (f == 'M') - descf = " MENSILE"; - else descf = ""; - - sep << "Ditta " << get_firm(); - sep << " " << ragsoc; - sep << " " << descf; - - sep.left_just(132); - - set_header (soh++, (const char*) sep); - - sep = ""; - sep << "Data " << _datast; - sep << " Pag. @#"; - - sep.right_just(127); - - sep.overwrite ("RIEPILOGO PROGRESSIVI"); - set_header (soh++, (const char*)sep); - sep.fill('-'); - set_header (soh++, (const char *) sep); - /* - set_header (soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); - set_header (soh++, (const char *) sep); - */ - if (_st_inizio_anno) - { - if (_prima_pagina) - set_header(soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); - else set_header(soh++, "Riepilogo progressivi IVA al Mese di: %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); - } - else set_header (soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); - set_header (soh, (const char *) sep); - } -} - -print_action CG0400_application::postprocess_page(int file, int counter) -{ - switch (_tipo_lista) - { - case stampa: - { - if (_st_inizio_anno) - if (_prima_pagina) - { - _prima_pagina = FALSE; - return REPEAT_PAGE; - } - else return NEXT_PAGE; - } - break; - case visualizza: -{ - if (_i < 12) return REPEAT_PAGE; - else return NEXT_PAGE; -} -break; - -default: -break; -} -return NEXT_PAGE; -} - -int cg0400(int argc,char* argv[]) -{ - CG0400_application a; - a.run(argc, argv, "Riepilogo progressivi IVA"); - return 0; -} - +//******************************** +//* Riepilogo Progressivi IVA * +//******************************** +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "classpim.h" +#include "cg0.h" +#include "cg0400.h" + +HIDDEN TString80 TMP; + +enum liste { + visualizza=1, + stampa=2, +}; + +struct Importi { + real imponibile; + real imposta; +}; + +struct TRiga_gen : public TArray +{ + TString16 _codiva; + real _impoven, _imposven; //imponibile e imposta vendite + real _impoacq, _imposacq; //imponibile e imposta acquisti + real _impobd, _imposbd; //imponibile e imposta importazioni (ovvero bolle doganali) + + TRiga_gen (const char* codiva, const real& impov, const real& imposv, const real& impoa, const real& imposa, const real& impobd, const real& imposbd): + _codiva(codiva),_impoven(impov),_imposven(imposv),_impoacq(impoa),_imposacq(imposa),_impobd(impobd),_imposbd(imposbd) {} +}; + +class TGen_array : public TArray +{ +public: + bool add_riga(const char* codiva, const real& imponibilev, const real& impostav, const real& imponibilea, const real& impostaa, const real& imponibilebd, const real& impostabd); + TRiga_gen& riga(int i) { return (TRiga_gen&)(*this)[i]; } +}; + +bool TGen_array::add_riga(const char* codiva, const real& imponibilev, const real& impostav, const real& imponibilea, const real& impostaa, const real& imponibilebd, const real& impostabd) +{ + bool found = FALSE; + for (int i = 0; i < items(); i++) + { + TRiga_gen& r = riga(i); + if (r._codiva==codiva) + { + found = TRUE; + r._impoven += imponibilev; + r._imposven += impostav; + r._impoacq += imponibilea; + r._imposacq += impostaa; + r._impobd += imponibilebd; + r._imposbd += impostabd; + } + } + if (!found) + { + TRiga_gen* r = new TRiga_gen(codiva,imponibilev,impostav,imponibilea,impostaa,imponibilebd,impostabd); + add(r); + } + return found; +}; + +struct TRiga_iva : public TArray +{ + tiporec _tipo; + real _imponibile, _imposta, _detrazione; + + TRiga_iva (const tiporec& tipo, const real& impo, const real& impos, const real& detr): + _tipo(tipo),_imponibile(impo),_imposta(impos), _detrazione(detr) {} +}; + +class TIva_array : public TArray +{ +public: + bool add_riga(const tiporec& tipo, const real& imponibile, + const real& imposta, const real& detr); + TRiga_iva& riga(int i) { return (TRiga_iva&)(*this)[i]; } +}; + +bool TIva_array::add_riga(const tiporec& tipo, const real& imponibile, + const real& imposta, const real& detr) +{ + bool found = FALSE; + for (int i = 0; i < items(); i++) + { + TRiga_iva& r = riga(i); + if (r._tipo == tipo) + { + found = TRUE; + r._imponibile += imponibile; + r._imposta += imposta; + r._detrazione += detr; + } + } + if (!found) + { + TRiga_iva* r = new TRiga_iva(tipo,imponibile,imposta,detr); + add(r); + } + return found; +}; + +class CG0400_application : public TPrintapp +{ + TTable* _tabpim, * _tabreg, * _tabais, * _tablia; + TLocalisamfile* _nditte, * _anag, * _com, * _attiv; + TMask* _msk; + TDate _data; + int _sospmsk, _tipoprog, _livelloprog, _tipo_aliq, _tipo_attiv, _annoiva, _i; + int _mese, _anno; + bool _st_inizio_anno, _prima_pagina; + TIva_array _iva_array,_iva1_array; + TGen_array _gen_array,_gen1_array; + TString _cap,_cofi,_paiva,_ragsoc,_comunefis,_provfis,_viafis,_codivamsk,_codattmsk; + TString _datast, _cod_att; + Importi _mesi[13]; + liste _tipo_lista; + +public: + + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int); + virtual void preprocess_header(); + virtual bool preprocess_page(int,int); + virtual print_action postprocess_page(int,int); + + void cerca_i_pim(); + void azzera_mesi(); + void get_dati_ditta(); + void setta_intestazione(); + void calcola_totali(real&,real&); + void cerca_tipo(TIva_array&, tiporec, real&, real&, real&); + void prospetto_pagina(TGen_array&, TIva_array&); + int stampa_intestazione_ditta(); + const char* desc_attivita(const char*); + const char* desc_iva(const char*); + char look_lia(long ditta = 0l); + void look_pim(); + + CG0400_application(){}; +}; + +HIDDEN int compare_rows(const TObject** o1, const TObject** o2) +{ + TRiga_gen* r1 = (TRiga_gen*)*o1; + TRiga_gen* r2 = (TRiga_gen*)*o2; + + return (strcmp((const char*)r1->_codiva, (const char*)r2->_codiva)); +} + +const char* CG0400_application::desc_attivita(const char* codatt) +{ + TTable attiv ("%AIS"); + attiv.zero(); + attiv.put("CODTAB", codatt); + if (attiv.read()==NOERR) + TMP = attiv.get("S0"); + else + TMP = ""; + return TMP; +} + +const char* CG0400_application::desc_iva(const char* cod) +{ + TTable tab_iva("%IVA"); + TString codtab(format("%-4s", cod)); + + tab_iva.zero(); + tab_iva.put("CODTAB", codtab); + if (tab_iva.read()==NOERR) + TMP = tab_iva.get("S0"); + else + TMP = ""; + + return TMP; +} + +char CG0400_application::look_lia(long ditta) +{ + if (ditta == 0l) ditta = get_firm(); + + TString16 y; y.format("%05ld%04d", ditta, _anno); + + _tablia->zero(); + _tablia->put("CODTAB", y); + + if (_tablia->read() != NOERR) + _tablia->zero(); + + return _tablia->get_char("S7"); +} + +bool CG0400_application::user_create() +{ + _tabpim = new TTable(TAB_PIM); + _tabreg = new TTable(TAB_REG); + _tabais = new TTable("%AIS"); + _tablia = new TTable("%LIA"); + _anag = new TLocalisamfile(LF_ANAG); + _nditte = new TLocalisamfile(LF_NDITTE); + _com = new TLocalisamfile(LF_COMUNI); + _attiv = new TLocalisamfile(LF_ATTIV); + + set_real_picture("###.###.###.###"); + set_print_zero(FALSE); + printer().footerlen(5); + + return TRUE; +} + +bool CG0400_application::user_destroy() +{ + delete _tabpim; + delete _tabreg; + delete _tabais; + delete _tablia; + delete _anag; + delete _nditte; + delete _com; + delete _attiv; + + return TRUE; +} + +void CG0400_application::azzera_mesi() +{ + for (int i=0; i<=12; i++) + { + _mesi[i].imponibile = ZERO; + _mesi[i].imposta = ZERO; + } +} + +void CG0400_application::look_pim() +{ + TTable pim("PIM"); + for (pim.first(); !pim.eof(); pim.next()) + { + real imponibile, imposta; + tiporec tipo; + + TString80 codtab = pim.get("CODTAB"); + int anno = atoi(codtab.mid(0,4)); + int mese = atoi(codtab.mid(13,2)); + TString16 codatt = codtab.mid(4,5); + TString16 codiva = codtab.mid(16,4); + TString16 tipoiva = pim.get("S5"); + codiva = codiva.trim(); + codatt = codatt.trim(); + + if (anno != _anno) continue; + + if (_st_inizio_anno) + if (mese > _mese) + continue; + + if (!_st_inizio_anno) + if (mese != _mese) + continue; + + if (codatt != _cod_att) continue; + + //Modifica del 12/07/1995 + if (tipoiva == "VE") continue; //i codici iva di tipo "VE" + //Fine //non devono essere stampati + + while (classify_pim(pim.curr(), imponibile, imposta, tipo)) + { + switch(tipo) + { + case acq_norm: + _gen_array.add_riga(codiva,ZERO,ZERO,imponibile,imposta,ZERO,ZERO); + if (_st_inizio_anno && mese == _mese) //lo metto in un array a parte + _gen1_array.add_riga(codiva,ZERO,ZERO,imponibile,imposta,ZERO,ZERO); + break; + case vend_norm: + _gen_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); + if (_st_inizio_anno && mese == _mese) //lo metto in un array a parte + _gen1_array.add_riga(codiva,imponibile,imposta,ZERO,ZERO,ZERO,ZERO); + break; + case bolle_doganali: + _gen_array.add_riga(codiva,ZERO,ZERO,ZERO,ZERO,imponibile,imposta); + if (_st_inizio_anno && mese == _mese) + _gen1_array.add_riga(codiva,ZERO,ZERO,ZERO,ZERO,imponibile,imposta); + break; + case acq_amm_ultdetr: + { + real detr = imponibile * real(0.06); + _iva_array.add_riga(tipo,imponibile,imposta,detr); + if (_st_inizio_anno && mese == _mese) + _iva1_array.add_riga(tipo,imponibile,imposta,detr); + } + break; + default: + _iva_array.add_riga(tipo,imponibile,imposta,ZERO); + if (_st_inizio_anno && mese == _mese) + _iva1_array.add_riga(tipo,imponibile,imposta,ZERO); + break; + } + } + } + _gen_array.sort(compare_rows); // ordinamento per codice iva + _gen1_array.sort(compare_rows); // ordinamento per codice iva +} + +void CG0400_application::cerca_i_pim() +{ + TTable pim("PIM"); + for (pim.first(); !pim.eof(); pim.next()) + { + real imponibile, imposta, impo, impos; + tiporec tipo; + + TString80 codtab = pim.get("CODTAB"); + int anno = atoi(codtab.mid(0,4)); + TString16 codatt = codtab.mid(4,5); + int mese = atoi(codtab.mid(13,2)); + TString16 codiva = codtab.mid(16,4); + TString16 tipoiva = pim.get("S5"); + + if (anno != _annoiva) continue; + + //Modifica del 12/07/1995 + if (tipoiva == "VE") continue; + //Fine + + if (_livelloprog == 1) //riepilogo per aliquota + { + codiva = codiva.trim(); + if (codiva != _codivamsk) continue; + } + + if (_livelloprog == 2) //riepilogo per attivita' + { + codatt = codatt.trim(); + if (codatt != _codattmsk) continue; + } + + impo = impos = ZERO; + + while (classify_pim(pim.curr(), imponibile, imposta, tipo)) + { + switch(tipo) + { + case acq_norm: + if (_tipoprog == 1) break; //vendite + if (_tipo_aliq == 1) //nella maschera e' stato richiesto + { //acquisti in genere + impo += imponibile; + impos += imposta; + } + break; + case vend_norm: + if (_tipoprog == 2) break; //acquisti + if (_sospmsk == 1) //nella maschera e' stato richiesto + { //vendite in genere + impo += imponibile; + impos += imposta; + } + break; + case vend_simp: + if (_tipoprog == 2) break; //acquisti + if (_sospmsk == 2) //nella maschera e' stato richiesto + { //vendite in sospensione d'imposta + impo += imponibile; + impos += imposta; + } + break; + case acq_ind_op_es: + if (_tipoprog == 1) break; + if (_tipo_aliq == 2) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_ind_pass_int: + if (_tipoprog == 1) break; + if (_tipo_aliq == 3) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_ind_art_19: + if (_tipoprog == 1) break; + if (_tipo_aliq == 4) + { + impo += imponibile; + impos += imposta; + } + break; + case base_ventilazione: + if (_tipoprog == 1) break; + if (_tipo_aliq == 5) + { + impo += imponibile; + impos += imposta; + } + break; + case bolle_doganali: + if (_tipoprog == 1) break; + if (_tipo_aliq == 6) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_simp: + if (_tipoprog == 1) break; + if (_tipo_aliq == 7) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_beni_riv: + if (_tipoprog == 1) break; + if (_tipo_attiv == 1) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_beni_ammort: + if (_tipoprog == 1) break; + if (_tipo_attiv == 2) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_beni_ammort_nd: + if (_tipoprog == 1) break; + if (_tipo_attiv == 3) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_beni_leasing: + if (_tipoprog == 1) break; + if (_tipo_attiv == 4) + { + impo += imponibile; + impos += imposta; + } + break; + case acq_amm_ultdetr: + if (_tipoprog == 1) break; + if (_tipo_attiv == 5) + { + impo += imponibile; + impos += imposta; + } + break; + case cess_amm: + if (_tipoprog == 2) break; + if (_livelloprog == 2) //Nel caso di vendite per attivita' il tipo costo/ricavo + { //viene forzato a 4 => cessione beni ammortizzabili + impo += imponibile; + impos += imposta; + } + default: + break; + } + } //fine while + _mesi[mese].imponibile += impo; + _mesi[mese].imposta += impos; + impo = impos = ZERO; + } +} + + +bool CG0400_application::set_print(int m) +{ + TString16 masc = ""; + + switch(m) + { + case 1: + masc = "cg0400a"; + _tipo_lista = visualizza; + break; + case 2: + masc = "cg0400b"; + _tipo_lista = stampa; + break; + default: + break; + } + + TMask msk(masc); + + if (msk.run() != K_ENTER) return FALSE; + + switch (_tipo_lista) + { + case visualizza: + { + _sospmsk = _tipo_aliq = _tipo_attiv = 0; + _annoiva = msk.get_int(F_ANNO); + _tipoprog = msk.get_int(F_TIPO); // 1 <=> vendite; 2 <=> acquisti + _livelloprog = msk.get_int(F_LIVELLO); // 1 <=> aliquota; 2 <=> attivita' + _codivamsk = msk.get(F_CODIVA); + _codattmsk = msk.get(F_ATTIVITA); + if (_livelloprog == 1 && _tipoprog == 2) + _tipo_aliq = msk.get_int(F_TIPOTABE); + if (_livelloprog == 2 && _tipoprog == 2) + _tipo_attiv = msk.get_int(F_TIPOTABEL); + if (_tipoprog == 1 && _livelloprog == 1) + _sospmsk = msk.get_int(F_TIPOTAB); //vendite in genere; vendite in sospensione d'imposta + + setta_intestazione(); + azzera_mesi(); + cerca_i_pim(); + } + break; + case stampa: +{ + _anno = msk.get_int(F_ANNO); + _datast = msk.get(F_DATASTAMPA); + _mese = msk.get_int(F_MESE); + _st_inizio_anno = msk.get_bool(F_STAMPA); + + TLocalisamfile attiv(LF_ATTIV); + attiv.zero(); + attiv.put(ATT_CODDITTA, get_firm()); + TRectype r(attiv.curr()); + //prospetto per ogni codice attivita' della ditta + for(attiv.read(_isgteq); !attiv.eof(); attiv.next()) + { + if (attiv.curr() != r) break; + + _cod_att = attiv.get("CODATT"); + _prima_pagina = TRUE; + + _iva_array.destroy(); + _iva1_array.destroy(); + _gen_array.destroy(); + _gen1_array.destroy(); + + look_pim(); + + print(); + } + return FALSE; +} +break; +default: +break; +} + +//set_real_picture("###.###.###.###"); +//set_print_zero(FALSE); +//printer().footerlen(5); + +return TRUE; +} + +void CG0400_application::calcola_totali(real& imp, real& imps) +{ + for (int i=0; i<=12; i++) + { + imp += _mesi[i].imponibile; + imps += _mesi[i].imposta; + } +} + +void CG0400_application::cerca_tipo(TIva_array& iva_array,tiporec t, + real& imp, real& imps, real& det) +{ + int k = 0; + bool trovato = FALSE; + imp = imps = det = ZERO; + while ( k < iva_array.items() && !trovato) + { + TRiga_iva& riga = (TRiga_iva&)iva_array[k]; + if (t == riga._tipo) + trovato = TRUE; + else k++; + } + if (trovato) + { + TRiga_iva& riga = (TRiga_iva&)iva_array[k]; + imp = riga._imponibile; + imps = riga._imposta; + det = riga._detrazione; + } +} + +bool CG0400_application::preprocess_page(int file, int counter) +{ + reset_print(); + + switch (_tipo_lista) + { + case stampa: + { + if (!_st_inizio_anno) + prospetto_pagina(_gen_array,_iva_array); + else + { + if (_prima_pagina) + prospetto_pagina(_gen1_array,_iva1_array); + else + { + printer().formfeed(); + prospetto_pagina(_gen_array,_iva_array); + } + } + } + break; + case visualizza: +{ + if (counter) + _i++; + else + _i = 1; + + const char* mese = itom(_i); + set_row(1,"%s", mese); + set_row(1,"@26g%r", &_mesi[_i].imponibile); + set_row(1,"@56g%r", &_mesi[_i].imposta); + if (_i == 12) + { + real tot_impo = ZERO; + real tot_imposta = ZERO; + calcola_totali(tot_impo, tot_imposta); + TString dep = ""; + set_row(2,(const char*) dep); + set_row(3,"@8gTotale"); + set_row(3,"@26g%r", &tot_impo); + set_row(3,"@56g%r", &tot_imposta); + } +} +break; +default: +break; +} +return TRUE; +} + +void CG0400_application::prospetto_pagina(TGen_array& gen, TIva_array& iva) +{ + real t_impov,t_imposv,t_impoa,t_imposa,t_impobd,t_imposbd; + t_impov = t_imposv = t_impoa = t_imposa = t_impobd = t_imposbd = ZERO; + int r = 1; + + set_row(++r, "Cod.@40gVENDITE@77gACQUISTI@113gIMPORTAZIONI"); + set_row(++r, "IVA Descrizione@29gImponibile@48gImposta@67gImponibile@86gImposta@105gImponibile@124gImposta"); + r+=2; + + for (int k = 0; k < gen.items(); k++) + { + TRiga_gen& riga = (TRiga_gen&)gen[k]; + TString80 descr = desc_iva(riga._codiva); + if (riga._impoven != ZERO) + set_row(r, "@24g%r", &riga._impoven); + if (riga._imposven != ZERO) + set_row(r, "@40g%r", &riga._imposven); + if (riga._impoacq != ZERO) + set_row(r, "@62g%r", &riga._impoacq); + if (riga._imposacq != ZERO) + set_row(r, "@78g%r", &riga._imposacq); + if (riga._impobd != ZERO) + set_row(r, "@100g%r", &riga._impobd); + if (riga._imposbd != ZERO) + set_row(r, "@116g%r", &riga._imposbd); + if (riga._impoven != ZERO || riga._imposven != ZERO || riga._impoacq != ZERO + || riga._imposacq != ZERO || riga._impobd != ZERO || riga._imposbd != ZERO) + { + set_row(r, "@0g%-4s", (const char*)riga._codiva); + set_row(r, "@5g%-.18s", (const char*)descr); + r++; + } + + t_impov += riga._impoven; + t_imposv += riga._imposven; + t_impoa += riga._impoacq; + t_imposa += riga._imposacq; + t_impobd += riga._impobd; + t_imposbd += riga._imposbd; + } + + gen.destroy(); + + r+=2; + set_row(r++, "Totale@24g%r@40g%r@62g%r@78g%r@100g%r@116g%r", + &t_impov,&t_imposv,&t_impoa,&t_imposa,&t_impobd,&t_imposbd); + r++; + real im, is, d; //inizializzati in cerca_tipo() + cerca_tipo(iva,acq_ind_op_es,im,is,d); + t_impoa += im; + t_imposa += is; + bool st_riga = FALSE; + if (im != ZERO || is != ZERO) + { + set_row(r++, "Totali acquisti indeducibili su ricavi esenti@62g%r@78g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_ind_art_19,im,is,d); + t_impoa += im; + t_imposa += is; + if (im != ZERO || is != ZERO) + { + set_row(r++, "Totali acquisti indeducibili per ART.19@62g%r@78g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_ind_pass_int,im,is,d); + t_impoa += im; + t_imposa += is; + if (im != ZERO || is != ZERO) + { + set_row(r++, "Totali acquisti indeducibili per passaggi interni@62g%r@78g%r", &im, &is); + st_riga = TRUE; + } + r+=2; + if (st_riga) + set_row(r++, "Totale generale IVA@24g%r@40g%r@62g%r@78g%r@100g%r@116g%r", + &t_impov,&t_imposv,&t_impoa,&t_imposa,&t_impobd,&t_imposbd); + r+=3; + int kk = r; + /* + set_row(r++, "ALTRI DATI RELATIVI ALLA DICHIARAZIONE@54gImponibile@74gImposta@91gDetrazione"); + r++; + */ + r+=2; + + st_riga = FALSE; + cerca_tipo(iva,acq_simp,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Acquisti in sospensione d'imposta@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,vend_simp,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Vendite in sospensione d'imposta@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,cess_amm,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Cessione beni ammortizzabili@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_beni_riv,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Acquisto beni destinati alla rivendita@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_beni_ammort,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Acquisto beni ammortizzabili iva detraibile@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_beni_ammort_nd,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Acquisto beni ammortizzabili iva non detraibile@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_beni_leasing,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Altri beni strumentali acquisiti in leasing@49g%r@66g%r", &im, &is); + st_riga = TRUE; + } + cerca_tipo(iva,acq_amm_ultdetr,im,is,d); + if (im != ZERO || is != ZERO) + { + set_row(r++, "Acquisto beni soggetti a detrazione (6%%)@49g%r@66g%r@86g%r", &im, &is, &d); + st_riga = TRUE; + } + if (st_riga) + set_row(kk, "ALTRI DATI RELATIVI ALLA DICHIARAZIONE@54gImponibile@74gImposta@91gDetrazione"); + + iva.destroy(); +} + +TRectype& look_com (const char* cod, TLocalisamfile *comuni) +{ + comuni->zero(); + comuni->put(COM_COM, cod); + comuni->read(); + if (comuni->bad()) + comuni->zero(); + + return comuni->curr(); +} + +void CG0400_application::get_dati_ditta() +{ + TLocalisamfile nditte(LF_NDITTE); + TLocalisamfile anag(LF_ANAG); + TString codanagr; + TString tipoa; + + nditte.zero(); + nditte.put(NDT_CODDITTA, get_firm()); + nditte.read(); + + if (nditte.bad()) nditte.zero(); + + codanagr = nditte.get(NDT_CODANAGR); + tipoa = nditte.get(NDT_TIPOA); + _ragsoc = nditte.get(NDT_RAGSOC); + + anag.setkey(1); + anag.zero(); + anag.put (ANA_TIPOA, tipoa); + anag.put (ANA_CODANAGR, codanagr); + anag.read(); + if (anag.bad()) anag.zero(); + + _cofi = anag.get(ANA_COFI); + _paiva = anag.get(ANA_PAIV); + _comunefis = anag.get(ANA_COMRF); + + if (_comunefis.empty()) + _comunefis = anag.get(ANA_COMRES); + + TRectype dep = look_com (_comunefis, _com); + + _comunefis = dep.get(COM_DENCOM); + _provfis = dep.get(COM_PROVCOM); + _cap = dep.get(COM_CAPCOM); + if (_comunefis.empty()) + { + _viafis = anag.get(ANA_INDRF); + _viafis.rtrim(); + _viafis << " " << anag.get (ANA_CIVRF); + } + else + { + _viafis = anag.get(ANA_INDRES); + _viafis.rtrim(); + _viafis << " " << anag.get (ANA_CIVRES); + } +} + +int CG0400_application::stampa_intestazione_ditta() +{ + int r = 1; + TString codice_ditta; + TString riga(132); + + get_dati_ditta(); + codice_ditta << get_firm(); + + set_header (r, "Ditta %s %s %s %s %s %s", (const char*)codice_ditta, + (const char*)_ragsoc, (const char*)_viafis, + (const char*)_cap, (const char*)_comunefis, + (const char*)_provfis); + r++; + riga = "Data @< Pag. @#"; + riga.right_just(127); + riga.overwrite (format ("Partita iva %s Codice fiscale %s", (const char*)_paiva, (const char*)_cofi)); + set_header (r, "%s", (const char*) riga); + r+=3; + + return r; +} + +void CG0400_application::setta_intestazione() +{ + int r = 1; + + reset_header(); + + r = stampa_intestazione_ditta(); + + if (_livelloprog == 1) + set_header(r++, "Gestione Iva@b@50gPROGRESSIVI IVA PER ALIQUOTA"); + else set_header(r++, "Gestione Iva@b@50gPROGRESSIVI IVA PER ATTIVITA'"); + r++; + set_header(r++, "Anno liquidazione %d", _annoiva); + if (_tipoprog == 1) //vendite + { + if (_livelloprog == 1) + { + if (_sospmsk == 1) + set_header(r, "Vendite in genere"); + else set_header(r, "Vendite in sospensione d'imposta"); + } + else set_header(r, "Cessione beni da ammortizzare"); + } + else //acquisti + { + if (_livelloprog == 1) //per codice iva + switch (_tipo_aliq) + { + case 1: + set_header(r, "Acquisti in genere"); + break; + case 2: + set_header(r, "Acquisti indetraibili su operazioni esenti"); + break; + case 3: + set_header(r, "Acquisti indetraibili passaggi interni"); + break; + case 4: + set_header(r, "Acquisti indetraibili art.19"); + break; + case 5: + set_header(r, "Acquisti base di calcolo per la ventilazione"); + break; + case 6: + set_header(r, "Bolle doganali"); + break; + case 7: + set_header(r, "Acquisti in sospensione d'imposta"); + break; + default: + break; + } + else //per attivita' + switch (_tipo_attiv) + { + case 1: + set_header(r, "Acquisti beni per rivendita"); + break; + case 2: + set_header(r, "Acquisti beni da ammortizzare detraibili"); + break; + case 3: + set_header(r, "Acquisti beni da ammortizzare non detraibili"); + break; + case 4: + set_header(r, "Altri beni strumentali acquisiti in leasing"); + break; + case 5: + set_header(r, "Acquisti beni da ammortizzare ult.detr. 6%"); + break; + default: + break; + } + } + r++; + if (_livelloprog == 1) + set_header(r++, "IVA %s",(const char*) _codivamsk); + else set_header(r++, "ATTIVITA' %s",(const char*)_codattmsk); + set_header(++r, "@29gImponibile@60gImposta"); +} + +void CG0400_application::preprocess_header() +{ + if (_tipo_lista == stampa) + { + int soh = 1; + TString sep(132); + TString ragsoc(50); + //TString attprev(5); + TString16 descf; + + TLocalisamfile nditte(LF_NDITTE); + nditte.zero(); + nditte.put(NDT_CODDITTA, get_firm()); + if (nditte.read() == NOERR) + { + ragsoc = nditte.get(NDT_RAGSOC); + //attprev = nditte.get(NDT_CODATTPREV); + } + + //TString80 descr = desc_attivita(attprev); + + TString80 descr = desc_attivita(_cod_att); + + reset_header(); + + char f = look_lia(); + if (f == 'T') + descf = " TRIMESTRALE"; + else if (f == 'M') + descf = " MENSILE"; + else descf = ""; + + sep << "Ditta " << get_firm(); + sep << " " << ragsoc; + sep << " " << descf; + + sep.left_just(132); + + set_header (soh++, (const char*) sep); + + sep = ""; + sep << "Data " << _datast; + sep << " Pag. @#"; + + sep.right_just(127); + + sep.overwrite ("RIEPILOGO PROGRESSIVI"); + set_header (soh++, (const char*)sep); + sep.fill('-'); + set_header (soh++, (const char *) sep); + /* + set_header (soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); + set_header (soh++, (const char *) sep); + */ + if (_st_inizio_anno) + { + if (_prima_pagina) + set_header(soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); + else set_header(soh++, "Riepilogo progressivi IVA al Mese di: %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); + } + else set_header (soh++, "Riepilogo progressivi IVA del periodo %s %d Cod. Att. %s %s", itom(_mese), _anno, (const char*) _cod_att, (const char*) descr); + set_header (soh, (const char *) sep); + } +} + +print_action CG0400_application::postprocess_page(int file, int counter) +{ + switch (_tipo_lista) + { + case stampa: + { + if (_st_inizio_anno) + if (_prima_pagina) + { + _prima_pagina = FALSE; + return REPEAT_PAGE; + } + else return NEXT_PAGE; + } + break; + case visualizza: +{ + if (_i < 12) return REPEAT_PAGE; + else return NEXT_PAGE; +} +break; + +default: +break; +} +return NEXT_PAGE; +} + +int cg0400(int argc,char* argv[]) +{ + CG0400_application a; + a.run(argc, argv, "Riepilogo progressivi IVA"); + return 0; +} + diff --git a/cg/cg3200.cpp b/cg/cg3200.cpp index a25607d3b..e3b573e1d 100755 --- a/cg/cg3200.cpp +++ b/cg/cg3200.cpp @@ -1,3526 +1,3526 @@ -//Versione dei mastrini aggiornata con le modifiche del periodo 18 Apr - 27 Apr 1995 -//Le modifiche riguardano: -// - Stampa due mastrini per pagina e conseguente numerazione. -// - Stampa mastrini in continuo e relativa numerazione. - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cg3.h" -#include "cg3200.h" -#include "cglib.h" -#include "cglib03.h" - -int date2esc(const TDate& d, int* prevesc = NULL); -bool sottoc_handler_ini (TMask_field& f, KEY k); -bool sottoc_handler_fine (TMask_field& f, KEY k); - -class TMastrini_application : public TPrintapp -{ - static bool data_inizio (TMask_field& f, KEY k); - static bool data_fine (TMask_field& f, KEY k); - static bool gruppo_hnd (TMask_field& f, KEY k); - static bool contoi_hnd (TMask_field& f, KEY k); - static bool contof_hnd (TMask_field& f, KEY k); - friend bool sottoc_handler_ini (TMask_field& f, KEY k); - friend bool sottoc_handler_fine (TMask_field& f, KEY k); - - TDociva_array _b; - TRelation* _rel; - TMask* _msk; - TTable* _tabivd, * _tabtpd, * _tabreg, * _tabesc; - TLocalisamfile* _mov; - TLocalisamfile* _nditte; - TLocalisamfile* _unloc; - TLocalisamfile* _comuni; - TLocalisamfile* _clifo; - TLocalisamfile* _caus; - TSaldo* _sld; - TParagraph_string* _d18,* _d23,* _d30; - TArray _riga, _lista; - - TDate _data_ini,_data_fine,_data_finese,_data_finesesucc,_ultima_data_reg; - TDate _datareg,_datadoc,_data_inizioese,_datareg_stampa,_inizioes; - int _cur1,_gruppo,_conto,_numcarat,_stampanum,_numivd,_annoiva; - int _numrig,_natdoc,_tipo,_tipostampa,_g_prec,_c_prec,_numrivd_int; - real _progredare,_progreavere,_totprogre_dare_al,_totprogre_avere_al; - real _totprogre_dare,_totprogre_avere,_importo; - real _riporto_dare,_riporto_avere,_riporto_parziale_dare,_riporto_parziale_avere; - real _totale_periodo_dare,_totale_periodo_avere,_totale_prima_dare,_totale_prima_avere; - real _saldo_periodo,_saldo_progre,_saldo_progre_al,_saldo_progre_prec; - real _saldo_movimenti,_saldo_progressivi,_totale_saldo; - TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; - long _codice_ditta,_s_prec; - TString _tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva,_g_contr,_c_contr,_s_contr; - char _sezivd,_lettivd; - TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd,_descr; - TString _dataregs, _datadocs; - int _gruppocontr,_contocontr,_nummast,_pagina; - long _sottocontocontr; - - bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov; - - int _annomsk,_annoesmsk,_annoes,_annomsksucc,_tipo_mask,_anno_ghost; - int _anno_corrente,_anno_precedente,_indbil,_numero_pag; - long _sottoc,_numreg,_numgio,_protiva; - bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare,_cambia_mastrino; - char _tmcf,_tipo_contr; - - TDate _dataregrmov; - int _gruppof,_contof; - long _sottocf; - TString _dataregrmovstring,_importo_str,_saldo_movimenti_str,_saldo_progressivi_str; - - int _rw, _conta_mastrini, _indice_array, _item, _item_lista, _indice_lista; - int _ddociva_len; - -protected: - virtual bool user_create() ; - virtual bool user_destroy(); - virtual bool set_print(int m); - - virtual bool preprocess_print(int file, int counter); - virtual bool preprocess_page (int,int); - virtual print_action postprocess_page (int,int); - virtual print_action postprocess_print(int,int); - virtual void preprocess_header(); - virtual void set_page(int,int); - virtual void process_link(int id, const char* txt); - -public: - TDate _inizioEs,_fineEs; - void ricerca_clifo(); - void ricerca_gruppo(); - int ricerca_clifo(int riga); - int ricerca_gruppo(int riga); - - void calcola_progressivi(); - void calcola_progressivi_al(); - void stampa_progressivi(); - int stampa_progressivi(int start_riga); - void stampa_progre_riporto(); - int stampa_progre_riporto(int start_riga); - void documenti_iva(); - void ricerca_regiva(); - void descrizione_causale(); - void saldi_zero(); - int crea_intestazione(int riga); - void crea_intestazione(); - void fai_stampa132(); - void fai_stampa198(); - void stampa_totali132(); - void stampa_totali198(); - void stampa_totali132_II(); - void stampa_totali198_II(); - void carica_array_totali132(); - void carica_array_totali198(); - void stampa_totaliiva(); - void ricerca_classe_IV(bool scelta); - void data_fine_esercizio(int); - const char* descrizione_gruppo(); - const char* descrizione_conto(); - const char* descrizione_sottoconto(); - const char* descrizione_classe(char,char,int,int); - bool almeno_un_record(); - void ricerca_dati_ditta(); - void conto(int,int,bool); - bool check_ordine(TMask_field& f, KEY k); - - void setta_riga (int r, TString riga); - int righe_rimaste_da_stampare(); - - TMastrini_application() {} -}; - -HIDDEN TMastrini_application& app() { return (TMastrini_application&) main_app(); } - -int TMastrini_application::righe_rimaste_da_stampare() -{ - int righe_rimaste = 0; - - if (_nummast == 2) - { - if (printer().rows_left() != 0) - { - if ( (_conta_mastrini % 2) != 0) - { - if ( (printer().formlen() % 2) != 0) - righe_rimaste = printer().rows_left() - (printer().formlen() / 2) + 1; //- 33; - else - righe_rimaste = printer().rows_left() - (printer().formlen() / 2); - } - else - righe_rimaste = printer().rows_left(); - } - else - { - if ( (_conta_mastrini % 2) != 0) - righe_rimaste = printer().formlen() / 2; //32; - else - { - if ( (printer().formlen() % 2) != 0) - righe_rimaste = (printer().formlen() / 2) + 1; //33; - else - righe_rimaste = printer().formlen / 2; - } - } - } - - return righe_rimaste; -} - -void TMastrini_application::process_link(int id, const char* txt) -{ - const char* const app = "cg2 -0"; - TToken_string ss(10); - ss.add("1"); - ss.add(txt); - - TMessage fs(cmd2name(app), MSG_LN, ss); - fs.send(); - - TExternal_app pn(app); - pn.run(); -} - -bool sottoc_handler_ini(TMask_field& f, KEY key) -{ - const short id = f.dlg(); - TString ds; - TString80 rs; - bool warning; - TLocalisamfile pconti (LF_PCON); - int conto; - - const int gruppo = f.mask().get_int(F_GRUPPOINI); - - if (id == F_SOTTOCINI_CONTO) - conto = f.mask().get_int(F_CONTOINI_CONTO); - else - if (id == F_SOTTOCINI_CLIENTE) - conto = f.mask().get_int(F_CONTOINI_CLIENTE); - else - if (id == F_SOTTOCINI_FORN) - conto = f.mask().get_int(F_CONTOINI_FORN); - - const long sottoconto = f.mask().get_long(id); - - if ( key == K_ENTER ) - { - if (sottoconto != 0 && conto == 0) - return f.warning_box("Manca il CONTO"); - - if (conto != 0 && gruppo == 0) - return f.warning_box("Manca il GRUPPO"); - } - - if ( key == K_TAB && f.mask().is_running()) - { - if (id == F_SOTTOCINI_CONTO) - { - pconti.zero(); - pconti.put(PCN_GRUPPO, gruppo) ; - pconti.put(PCN_CONTO, conto); - pconti.put(PCN_SOTTOCONTO, sottoconto); - pconti.setkey(1); - pconti.read(_isequal, _nolock); - if (pconti.good()) - { - ds = pconti.get(PCN_DESCR); - warning = FALSE; - } - else - { - ds = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRINI_CONTO, ds); - f.mask().set(F_DESCRINI_CLIENTE, ds); - f.mask().set(F_DESCRINI_FORN, ds); - - if (warning) - return f.warning_box("Sottoconto inesistente"); - } - else - if (id == F_SOTTOCINI_CLIENTE || id == F_SOTTOCINI_FORN) - { - char tipo = id == F_SOTTOCINI_CLIENTE ? 'C' : 'F'; - TLocalisamfile clifo (LF_CLIFO); - if (sottoconto != 0) - { - clifo.zero(); - clifo.put(CLI_TIPOCF,tipo); - clifo.put(CLI_CODCF, sottoconto) ; - clifo.setkey(1); - if (clifo.read(_isequal, _nolock) == NOERR) - { - rs = clifo.get(CLI_RAGSOC); - warning = FALSE; - } - else - { - rs = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRINI_CLIENTE, rs); - f.mask().set(F_DESCRINI_FORN, rs); - - if (warning) - return f.warning_box("Anagrafica inesistente"); - } - } - } - return TRUE; -} - -///////////////////////////////////////////////////////////////////////////// -// Inizio modifica del 02-05-95 riguardo controlli di validita' su gruppo, // -// conto e sottoconto iniziale e finale. // -///////////////////////////////////////////////////////////////////////////// - -bool sottoc_handler_fine(TMask_field& f, KEY key) -{ - const short id = f.dlg(); - int conto; - TString ds; - TString80 rs; - bool warning; - TLocalisamfile pconti (LF_PCON); - - const int gruppo = f.mask().get_int(F_GRUPPOFINE); - - if (id == F_SOTTOCFINE_CONTO) - conto = f.mask().get_int(F_CONTOFINE_CONTO); - else - if (id == F_SOTTOCFINE_CLIENTE) - conto = f.mask().get_int(F_CONTOFINE_CLIENTE); - else - if (id == F_SOTTOCFINE_FORN) - conto = f.mask().get_int(F_CONTOFINE_FORN); - - const long sottoconto = f.mask().get_long(id); - - if ( key == K_ENTER ) - { - if (sottoconto != 0 && conto == 0) - return f.warning_box("Manca il CONTO"); - - if (conto != 0 && gruppo == 0) - return f.warning_box("Manca il GRUPPO"); - - if (!app().check_ordine(f,key)) - return FALSE; - } - - if ( key == K_TAB && f.mask().is_running()) - { - if (id == F_SOTTOCFINE_CONTO) - { - pconti.zero(); - pconti.put(PCN_GRUPPO, gruppo) ; - pconti.put(PCN_CONTO, conto); - pconti.put(PCN_SOTTOCONTO, sottoconto); - pconti.setkey(1); - pconti.read(_isequal, _nolock); - if (pconti.good()) - { - ds = pconti.get(PCN_DESCR); - warning = FALSE; - } - else - { - ds = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRFINE_CONTO, ds); - f.mask().set(F_DESCRFINE_CLIENTE, ds); - f.mask().set(F_DESCRFINE_FORN, ds); - - if (warning) - return f.warning_box("Sottoconto inesistente"); - } - else - if (id == F_SOTTOCFINE_CLIENTE || id == F_SOTTOCFINE_FORN) - { - char tipo = id == F_SOTTOCFINE_CLIENTE ? 'C' : 'F'; - TLocalisamfile clifo (LF_CLIFO); - if (sottoconto != 0) - { - clifo.zero(); - clifo.put(CLI_TIPOCF,tipo); - clifo.put(CLI_CODCF, sottoconto) ; - clifo.setkey(1); - if (clifo.read(_isequal, _nolock) == NOERR) - { - rs = clifo.get(CLI_RAGSOC); - warning = FALSE; - } - else - { - rs = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRFINE_CLIENTE, rs); - f.mask().set(F_DESCRFINE_FORN, rs); - - if (warning) - return f.warning_box("Anagrafica inesistente"); - } - } - } - return TRUE; -} - -bool TMastrini_application::gruppo_hnd (TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - int gruppof = f.mask().get_int(F_GRUPPOFINE); - - if (gruppof == 0) - return TRUE; - - int gruppoi = f.mask().get_int(F_GRUPPOINI); - - if (gruppoi > gruppof) - return f.error_box("Il gruppo di partenza deve essere inferiore o uguale al gruppo di arrivo"); - } - - return TRUE; -} - -bool TMastrini_application::contoi_hnd (TMask_field& f, KEY k) -{ - TLocalisamfile pconti (LF_PCON); - TString ds; - - const short id = f.dlg(); - - if (k == K_TAB && f.mask().is_running()) - { - int gruppo = f.mask().get_int(F_GRUPPOINI); - int conto = f.mask().get_int(id); - - if (gruppo != 0 && conto != 0) - { - bool warning; - - char tipomsk = f.mask().get(F_TIPOCF_INI)[0]; - - pconti.zero(); - pconti.put(PCN_GRUPPO, gruppo) ; - pconti.put(PCN_CONTO, conto); - pconti.setkey(1); - pconti.read(_isequal, _nolock); - if (pconti.good()) - { - char tipo = pconti.get_char(PCN_TMCF); - if (tipomsk != tipo) - return f.warning_box("Conto inesistente"); - - ds = pconti.get(PCN_DESCR); - warning = FALSE; - } - else - { - ds = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRINI_CLIENTE, ds); - f.mask().set(F_DESCRINI_FORN, ds); - f.mask().set(F_DESCRINI_CONTO, ds); - - if (warning) - return f.warning_box("Conto inesistente"); - } - else - { - ds = ""; - f.mask().set(F_DESCRINI_CLIENTE, ds); - f.mask().set(F_DESCRINI_FORN, ds); - f.mask().set(F_DESCRINI_CONTO, ds); - } - } - - return TRUE; -} - -bool TMastrini_application::contof_hnd (TMask_field& f, KEY k) -{ - TLocalisamfile pconti (LF_PCON); - TString ds; - const short id = f.dlg(); - - if (k == K_ENTER) - { - int gruppof = f.mask().get_int(F_GRUPPOFINE); - - if (gruppof == 0) - return TRUE; - - int gruppoi = f.mask().get_int(F_GRUPPOINI); - - if (gruppoi < gruppof) - return TRUE; - - int contof = f.mask().get_int(id); - int contoi; - - char tipo = f.mask().get(F_TIPOCF_INI)[0]; - - if (tipo == '\0') - contoi = f.mask().get_int(F_CONTOINI_CONTO); - else - if (tipo == 'C') - contoi = f.mask().get_int(F_CONTOINI_CLIENTE); - else - if (tipo == 'F') - contoi = f.mask().get_int(F_CONTOINI_FORN); - - - if (contoi > contof) - return f.error_box("Il conto di partenza deve essere inferiore o uguale al conto di arrivo"); - } - - if (k == K_TAB && f.mask().is_running()) - { - int gruppo = f.mask().get_int(F_GRUPPOFINE); - int conto = f.mask().get_int(id); - if (gruppo != 0 && conto != 0) - { - bool warning; - - char tipomsk = f.mask().get(F_TIPOCF_FINE)[0]; - - pconti.zero(); - pconti.put(PCN_GRUPPO, gruppo) ; - pconti.put(PCN_CONTO, conto); - pconti.setkey(1); - pconti.read(_isequal, _nolock); - if (pconti.good()) - { - char tipo = pconti.get_char(PCN_TMCF); - if (tipomsk != tipo) - return f.warning_box("Conto inesistente"); - - ds = pconti.get(PCN_DESCR); - warning = FALSE; - } - else - { - ds = ""; - warning = TRUE; - } - - f.mask().set(F_DESCRFINE_CLIENTE, ds); - f.mask().set(F_DESCRFINE_FORN, ds); - f.mask().set(F_DESCRFINE_CONTO, ds); - - if (warning) - return f.warning_box("Conto inesistente"); - } - else - { - ds = ""; - f.mask().set(F_DESCRFINE_CLIENTE, ds); - f.mask().set(F_DESCRFINE_FORN, ds); - f.mask().set(F_DESCRFINE_CONTO, ds); - } - - } - - return TRUE; -} - -///////////////////////////////////////////////////////////////////////////// -// FINE MODIFICA DEL 02-05-95 // -///////////////////////////////////////////////////////////////////////////// - -bool TMastrini_application::check_ordine(TMask_field& f, KEY k) -{ - int gruppof = f.mask().get_int(F_GRUPPOFINE); - - if (gruppof == 0) - return TRUE; - - int gruppoi = f.mask().get_int(F_GRUPPOINI); - - if (gruppoi < gruppof) - return TRUE; - - int contof = f.mask().get_int(F_CONTOFINE_CONTO); - int contoi = f.mask().get_int(F_CONTOINI_CONTO); - - if (contoi < contof) - return TRUE; - - long sottocf = f.mask().get_long(F_SOTTOCFINE_CONTO); - long sottoci = f.mask().get_long(F_SOTTOCINI_CONTO); - - if (sottoci > sottocf) - return f.error_box("Il sottoconto di partenza deve essere inferiore o uguale al sottoconto di arrivo"); - - return TRUE; -} - -int date2esc(const TDate& d, int* prevesc) -{ - if (prevesc) *prevesc = 0; - TTable esc("ESC"); - for (int err = esc.first(); err == NOERR; err = esc.next()) - { - const TDate ia(esc.get("D0")); // Data inizio esercizio - const TDate fa(esc.get("D1")); // Data fine esercizio - app()._inizioEs = ia; - app()._fineEs = fa; - const anno = esc.get_int("CODTAB"); - if (d >= ia && d <= fa) - return anno; - if (prevesc) *prevesc = anno; - } - return 0; -} - -//Questa funzione restituisce vero se il record su piano dei conti ha almeno un -//record figlio (e che soddisfa la condizione riguardante la data di registr.). -//Viene successivamente utilizzata per stampare l'intestazione (e i totali) -//oppure no - -bool TMastrini_application::almeno_un_record() -{ - bool trovato=FALSE; - long record,sottoc; - int gruppo,conto; - TDate datareg, datacomp; - TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); - - if (current_cursor()->is_first_match(LF_RMOV)) - { - record = rmov.recno(); - rmov.zero(); - rmov.put(RMV_GRUPPO, _gruppo); - rmov.put(RMV_CONTO, _conto); - rmov.put(RMV_SOTTOCONTO, _sottoc); - for (rmov.read(); !rmov.eof() ;rmov.next()) - { - int annoes = rmov.get_int (RMV_ANNOES); - long numreg = rmov.get_long(RMV_NUMREG); - - _mov->setkey(1); - _mov->curr().zero(); - _mov->curr().put(MOV_NUMREG,numreg); - _mov->read(); - if (_mov->bad()) - _mov->zero(); - datacomp = (_mov->curr().get(MOV_DATACOMP)); - - if (_annomsk == 0) - datareg = rmov.get_date(RMV_DATAREG); - else - if (_annomsk != 0) - datareg = datacomp; - - gruppo = rmov.get_int(RMV_GRUPPO); - conto = rmov.get_int(RMV_CONTO); - sottoc = rmov.get_long(RMV_SOTTOCONTO); - if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) - break; - else - if (((annoes==_annomsk)||(_annomsk==0))&&((datareg>=_data_ini)&&(datareg<=_data_fine))) - { - trovato = TRUE; - break; - } - } - rmov.readat(record); - } - return trovato; -} - -bool TMastrini_application::data_inizio(TMask_field& f, KEY k) -{ - int anno; - TDate data; - - anno = f.mask().get_int(F_ANNO); - data = f.mask().get (F_DATAINI); - app()._annomsk = anno; - - if (k == K_ENTER) - { - if (anno != 0) - { - app().data_fine_esercizio(anno); - - if (data == botime) - app()._data_ini = app()._data_inizioese; - else - if (data < app()._data_inizioese || data > app()._data_finese) - { - f.error_box("La data non appartiene all'esercizio indicato"); - return FALSE; - } - else - app()._data_ini = data; - } - else - if (anno == 0) - { - if (data == botime) - { - f.error_box("La data deve essere obbligatoriamente indicata"); - return FALSE; - } - else - app()._data_ini = data; - } - } - return TRUE; -} - -bool TMastrini_application::data_fine(TMask_field& f, KEY k) -{ - int annoes; - TDate data, data_ini; - - annoes = f.mask().get_int(F_ANNO); - data = f.mask().get (F_DATAFINE); - data_ini = f.mask().get (F_DATAINI); - app()._annomsk = annoes; - - if (k == K_ENTER) - { - if (annoes != 0) - { - app().data_fine_esercizio(annoes); - - if (data == botime) - app()._data_fine = app()._data_finese; - else - if (data < app()._data_inizioese || data > app()._data_finese) - { - f.error_box("La data non appartiene all'esercizio indicato"); - return FALSE; - } - else - app()._data_fine = data; - } - else - if (annoes == 0) - { - if (data == botime) - { - f.error_box("La data deve essere obbligatoriamente indicata"); - return FALSE; - } - - app()._anno_ghost = date2esc(data_ini); - - app()._inizioes = app()._inizioEs; - - if (data < app()._inizioEs || data > app()._fineEs) - { - f.error_box("La data non appartiene all'esercizio indicato"); - return FALSE; - } - else - app()._data_fine = data; - } - - if (data < data_ini) - { - f.error_box("La data finale non puo' essere inferiore alla data di partenza"); - return FALSE; - } - - - } - return TRUE; -} - -void TMastrini_application::saldi_zero() -{ - TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); - real saldo_dare, saldo_avere; - long record; - - saldo_dare = saldo_avere = 0; - - if (current_cursor()->is_first_match(LF_RMOV)) - { - record = rmov.recno(); - - while (!rmov.eof()) - { - rmov.read(); - char sezione = rmov.curr().get(RMV_SEZIONE)[0]; - real importo = rmov.curr().get_real(RMV_IMPORTO); - int gruppo = atoi(rmov.get(RMV_GRUPPO)); - int conto = atoi(rmov.get(RMV_CONTO)); - long sottoc = atol(rmov.get(RMV_SOTTOCONTO)); - - if ((gruppo == _gruppo)&&(conto == _conto)&&(sottoc == _sottoc)) - { - if (sezione == 'D') - saldo_dare += importo; - else if (sezione == 'A') - saldo_avere += importo; - } - else break; - rmov.next(); - } - rmov.readat(record); - } - _totale_saldo = saldo_dare - saldo_avere; -} - -void TMastrini_application::fai_stampa132() -{ - if (_nummast == 1 || _nummast == 3) - _rw = 1; - else - if (_nummast == 2) - { - int riga; - - if ( (_conta_mastrini % 2) != 0 ) - riga = (printer().formlen() / 2); //-1 - else - riga = printer().formlen(); //-1; - - int app1 = printer().formlen(); - int app2 = printer().rows_left(); - int cur_row = (app1 - app2); - - if (cur_row == riga) - { - //_rw += 2; - _rw = crea_intestazione(_rw); - _rw = stampa_progre_riporto(_rw); - - for (int i = _indice_array; i < _item; i++) - { - TString& data = (TString&)_riga[i]; - - int g1 = data.find("g",1); - int c1 = data.find("@",g1); - int g2 = data.find("g",c1); - - TString fmt1 = ""; - TString fmt2 = ""; - TString str1,str2; - - if (g1 != -1) - { - fmt1 = data.sub(0,g1+1); - fmt1 << "%s"; - str1 = data.sub(g1+1,c1); - } - if (c1 != -1) - { - fmt2 = data.sub(c1,g2+1); - fmt2 << "%s"; - str2 = data.sub(g2+1); - } - - if (fmt1 != "") - set_row (_rw,fmt1,(const char*) str1); - if (fmt2 != "") - set_row (_rw,fmt2,(const char*) str2); - - _rw++; - } - } - else - _rw = 1; - - _riga.destroy(); - } - - set_row (_rw,"@0g#t", &_dataregs); - if (_stampanum == 1) - set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); - else - if (_stampanum == 2) - { - set_row (_rw,"@11g#7d", &_numgio); - } - - set_row (_rw,"@19g#t", &_datadocs); - set_row (_rw,"@30g#7t", &_numdoc); - set_row (_rw,"@38g#3t", &_codcaus); - - set_row (_rw,"@117g#3t", &_g_contr); - set_row (_rw,"@120g#3t", &_c_contr); - set_row (_rw,"@123g#6t", &_s_contr); -} - -void TMastrini_application::fai_stampa198() -{ - if (_nummast == 1 || _nummast == 3) - _rw = 1; - else - if (_nummast == 2) - { - int riga; - - if ( (_conta_mastrini % 2) != 0 ) - riga = (printer().formlen() / 2); //-1 - else - riga = printer().formlen(); //-1; - - int app1 = printer().formlen(); - int app2 = printer().rows_left(); - int cur_row = (app1 - app2); - - if (cur_row == riga) - { - //_rw += 2; - _rw = crea_intestazione(_rw); - _rw = stampa_progre_riporto(_rw); - - for (int i = _indice_array; i < _item; i++) - { - TString& data = (TString&)_riga[i]; - - int g1 = data.find("g",1); - int c1 = data.find("@",g1); - int g2 = data.find("g",c1); - - TString fmt1 = ""; - TString fmt2 = ""; - TString str1,str2; - - if (g1 != -1) - { - fmt1 = data.sub(0,g1+1); - fmt1 << "%s"; - str1 = data.sub(g1+1,c1); - } - if (c1 != -1) - { - fmt2 = data.sub(c1,g2+1); - fmt2 << "%s"; - str2 = data.sub(g2+1); - } - - if (fmt1 != "") - set_row (_rw,fmt1,(const char*) str1); - if (fmt2 != "") - set_row (_rw,fmt2,(const char*) str2); - - _rw++; - } - } - else - _rw = 1; - - _riga.destroy(); - } - - set_row (_rw,"@0g#t", &_dataregs); - if (_stampanum == 1) - { - set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); - set_row (_rw,"@18g/#3d", &_numrig); - } - else if (_stampanum == 2) - set_row (_rw,"@11g#7d", &_numgio); - - set_row (_rw,"@23g#t", &_datadocs); - set_row (_rw,"@34g#7t", &_numdoc); - set_row (_rw,"@42g#3t", &_codcaus); - -// Stampa saldo movimenti - - set_row (_rw,"@149g#t", &_saldo_movimenti_str); - - set_row (_rw,"@165g#3t", &_g_contr); - set_row (_rw,"@169g#3t", &_c_contr); - set_row (_rw,"@173g#6t", &_s_contr); -} - -void TMastrini_application::stampa_totali132() -{ - TString sep(132); - - if (_nummast == 1 || _nummast == 3) - _rw = 2; - - sep.fill('-'); //Stampa 132 - (sep(132)) - set_row(_rw++,"@0g%s", (const char *) sep); - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; - _saldo_progre = _totprogre_dare - _totprogre_avere; - _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; - TString string = _saldo_periodo.string("###.###.###.###"); - set_row (_rw,"@32gTOTALI PERIODO@69g%15s", (const char*)string); - string = _totale_periodo_dare.string("###.###.###.###"); - set_row (_rw,"@85g%15s", (const char*)string); - string = _totale_periodo_avere.string("###.###.###.###"); - set_row (_rw++,"@101g%15s", (const char*)string); - string = _saldo_progre.string("###.###.###.###"); - set_row (_rw,"@32gTOTALI PROGRESSIVI@69g%15s", (const char*)string); - string = _totprogre_dare.string("###.###.###.###"); - set_row (_rw,"@85g%15s", (const char*)string); - string = _totprogre_avere.string("###.###.###.###"); - set_row (_rw++,"@101g%15s", (const char*)string); - if (_stampaprogre) //Progressivi attuali - { - TString str = _saldo_progre_al.string("###.###.###.###"); - set_row (_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); - set_row (_rw,"@69g%15s", (const char*)str); - str = _totprogre_dare_al.string("###.###.###.###"); - set_row (_rw,"@85g%15s", (const char*)str); - str = _totprogre_avere_al.string("###.###.###.###"); - set_row (_rw,"@101g%15s", (const char*)str); - } -} - -void TMastrini_application::carica_array_totali132() -{ - TString sep(132); - TToken_string r(255); - - if (_nummast == 2) - _rw = 1; - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; - _saldo_progre = _totprogre_dare - _totprogre_avere; - _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; - - sep.fill(' '); - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - sep.fill('-'); //Stampa 132 - (sep(132)) - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - r.add("@32gTOTALI PERIODO@69g%15s@85g%15s@101g%15s"); - r.add(_saldo_periodo.string("###.###.###.###")); - r.add(_totale_periodo_dare.string("###.###.###.###")); - r.add(_totale_periodo_avere.string("###.###.###.###")); - _lista.add(r); - r = ""; - - r.add("@32gTOTALI PROGRESSIVI@69g%15s@85g%15s@101g%15s"); - r.add(_saldo_progre.string("###.###.###.###")); - r.add(_totprogre_dare.string("###.###.###.###")); - r.add(_totprogre_avere.string("###.###.###.###")); - _lista.add(r); - r = ""; - - if (_stampaprogre) //Progressivi attuali - { - r.add("@32gTOTALI PROGRESSIVI AL@55g%s@69g%15s@85g%15s@101g%15s"); - r.add(_ultima_data_reg.string()); - r.add(_saldo_progre_al.string("###.###.###.###")); - r.add(_totprogre_dare_al.string("###.###.###.###")); - r.add(_totprogre_avere_al.string("###.###.###.###")); - _lista.add(r); - r = ""; - } - - if (_stampatotiva) - { - real totale; - - sep.fill(' '); - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - TString fmt ("@0g%s"); - TString fmt1(format("@%dg", _ddociva_len)); - fmt << fmt1 << "%15s"; - - for (int j = 0; j < _b.items(); j++) - { - TDociva& riga = (TDociva&)_b[j]; - r.add(fmt); - r.add(riga._descrdoc); - totale = riga._totdociva; - r.add(totale.string("###.###.###.###")); - _lista.add(r); - r = ""; - } - - _b.destroy(); - } - - _indice_lista = 0; -} - -void TMastrini_application::stampa_totali132_II() -{ - int riga,cur_row,diff; - int lim = 0; - - _item_lista = _lista.items(); - - if ( (_conta_mastrini % 2) != 0 ) - { - riga = (printer().formlen() / 2); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - else - { - riga = printer().formlen(); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - - if (_indice_lista == 0 && diff != 0) - { - if (_item_lista > diff) - lim = diff; - else - lim = _item_lista; - } - else - { - lim = _item_lista; - _rw = 1; - _rw = crea_intestazione(_rw); - _rw = stampa_progre_riporto(_rw); - if ( (_conta_mastrini % 2) != 0 ) - { - riga = (printer().formlen() / 2); //- 1; - cur_row = _rw; - diff = riga - cur_row; - } - else - { - riga = printer().formlen(); //- 1; - cur_row = _rw + (printer().formlen() / 2); //32; - diff = riga - cur_row; - } - } - - for (int i = _indice_lista; i < lim; i++) - { - TToken_string& data = (TToken_string&)_lista[i]; - - TString fmt (data.get(0)); - TString arg1 (data.get(1)); - TString arg2 (data.get(2)); - TString arg3 (data.get(3)); - TString arg4 (data.get(4)); - - set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); - - _indice_lista++; - } - - if (_item_lista <= diff) - _lista.destroy(); -} - -void TMastrini_application::stampa_totali198() -{ - TString sep(198); - - if (_nummast == 1 || _nummast == 3) - _rw = 1; - - sep.fill('-'); //Stampa 198 - (sep(198)) - set_row(_rw++,"@0g%s", (const char *) sep); - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - TString string = _totale_periodo_dare.string("###.###.###.###"); - set_row (_rw,"@32gTOTALI PERIODO@101g%15s", (const char*)string); - string = _totale_periodo_avere.string("###.###.###.###"); - set_row (_rw,"@117g%15s", (const char*)string); - string = _saldo_movimenti.string("###.###.###.###"); - set_row (_rw++,"@149g%15s", (const char*)string); - string = _totprogre_dare.string("###.###.###.###"); - set_row (_rw,"@32gTOTALI PROGRESSIVI@101g%15s",(const char*)string); - string = _totprogre_avere.string("###.###.###.###"); - set_row (_rw,"@117g%15s", (const char*)string); - string = _saldo_progressivi.string("###.###.###.###"); - set_row (_rw++,"@133g%15s", (const char*)string); - if (_stampaprogre) //Progressivi attuali - { - set_row(_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); - TString str = _totprogre_dare_al.string("###.###.###.###"); - set_row (_rw,"@101g%15s", (const char*)str); - str = _totprogre_avere_al.string("###.###.###.###"); - set_row (_rw,"@117g%15s", (const char*)str); - str = _saldo_progressivi.string("###.###.###.###"); - set_row (_rw,"@133g%15s", (const char*)str); - } -} - -void TMastrini_application::carica_array_totali198() -{ - TString sep(198); - TToken_string r(255); - - if (_nummast == 2) - _rw = 1; - - sep.fill(' '); //Stampa 132 - (sep(132)) - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - sep.fill('-'); //Stampa 132 - (sep(132)) - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - - r.add("@32gTOTALI PERIODO@101g%15s@117g%15s@149g%15s"); - r.add(_totale_periodo_dare.string("###.###.###.###")); - r.add(_totale_periodo_avere.string("###.###.###.###")); - r.add(_saldo_movimenti.string("###.###.###.###")); - _lista.add(r); - r = ""; - - r.add("@32gTOTALI PROGRESSIVI@101g%15s@117g%15s@133g%15s"); - r.add(_totprogre_dare.string("###.###.###.###")); - r.add(_totprogre_avere.string("###.###.###.###")); - r.add(_saldo_progressivi.string("###.###.###.###")); - _lista.add(r); - r = ""; - - if (_stampaprogre) //Progressivi attuali - { - r.add("@32gTOTALI PROGRESSIVI AL@55g%s@101g%15s@117g%15s@133g%15s"); - r.add(_ultima_data_reg.string()); - r.add(_totprogre_dare_al.string("###.###.###.###")); - r.add(_totprogre_avere_al.string("###.###.###.###")); - r.add(_saldo_progressivi.string("###.###.###.###")); - _lista.add(r); - r = ""; - } - - if (_stampatotiva) - { - real totale; - - sep.fill(' '); - r.add("@0g%s"); - r.add(sep); - _lista.add(r); - r = ""; - - TString fmt ("@0g%s"); - TString fmt1(format("@%dg", _ddociva_len)); - fmt << fmt1 << "%15s"; - - for (int j = 0; j < _b.items(); j++) - { - TDociva& riga = (TDociva&)_b[j]; - r.add(fmt); - r.add(riga._descrdoc); - totale = riga._totdociva; - r.add(totale.string("###.###.###.###")); - _lista.add(r); - r = ""; - } - - _b.destroy(); - } - - _indice_lista = 0; -} - -void TMastrini_application::stampa_totali198_II() -{ - int riga,cur_row,diff; - int lim = 0; - - _item_lista = _lista.items(); - - if ( (_conta_mastrini % 2) != 0 ) - { - riga = (printer().formlen() / 2); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - else - { - riga = printer().formlen(); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - - if (_indice_lista == 0 && diff != 0) - { - if (_item_lista > diff) - lim = diff; - else - lim = _item_lista; - } - else - { - lim = _item_lista; - _rw = 1; - _rw = crea_intestazione(_rw); - _rw = stampa_progre_riporto(_rw); - if ( (_conta_mastrini % 2) != 0 ) - { - riga = (printer().formlen() / 2); //- 1; - cur_row = _rw; - diff = riga - cur_row; - } - else - { - riga = printer().formlen(); //- 1; - cur_row = _rw + (printer().formlen() / 2); //32; - diff = riga - cur_row; - } - } - - for (int i = _indice_lista; i < lim; i++) - { - TToken_string& data = (TToken_string&)_lista[i]; - - TString fmt (data.get(0)); - TString arg1 (data.get(1)); - TString arg2 (data.get(2)); - TString arg3 (data.get(3)); - TString arg4 (data.get(4)); - - set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); - - _indice_lista++; - } - - if (_item_lista <= diff) - _lista.destroy(); -} - -void TMastrini_application::setta_riga (int r, TString riga) -{ - TString *p = (TString*)_riga.objptr(r); - if (!p) - { - p = new TString; - _riga.add (p); - } - *p << riga; -} - -bool TMastrini_application::preprocess_page(int file, int counter) -{ - TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); - long rec; - TDate datasucc; - TString datasuccstring,dataregrmovstring; - int gruppof,contof; - long sottocf; - TString provvis = ""; - int annoes; - - if (counter) - return TRUE; - - switch (file) - { - case LF_SALDI: - -// Usati in crea_intestazione() - - if (_nummast == 3 || _nummast == 2) - { - _rw = 0; - _rw++; - } - - _gruppo = atoi(current_cursor()->curr(LF_SALDI).get(SLD_GRUPPO)); - _conto = atoi(current_cursor()->curr(LF_SALDI).get(SLD_CONTO)); - _sottoc = atol(current_cursor()->curr(LF_SALDI).get(SLD_SOTTOCONTO)); - - _cambia_mastrino = TRUE; - - annoes = atoi(current_cursor()->curr(LF_SALDI).get(SLD_ANNOES)); - conto(_gruppo,_conto,TRUE); - - if (annoes != _anno_corrente && annoes != _anno_precedente) - return FALSE; - - if (_g_prec == _gruppo && _c_prec == _conto && _s_prec == _sottoc) - return FALSE; - - _g_prec = _gruppo; - _c_prec = _conto; - _s_prec = _sottoc; - - _saldo_periodo = ZERO; - _totale_periodo_dare = ZERO; - _totale_periodo_avere = ZERO; - _saldo_progre = ZERO; - _totprogre_dare = ZERO; - _totprogre_avere = ZERO; - _saldo_progre_al = ZERO; - _totprogre_dare_al = ZERO; - _totprogre_avere_al = ZERO; - _progredare = ZERO; - _progreavere = ZERO; - _totale_prima_dare = ZERO; - _totale_prima_avere = ZERO; - _saldo_movimenti = ZERO; - _saldo_progressivi = ZERO; - _saldo_progre_prec = ZERO; - if (_tipostampa == 2) - saldi_zero(); - else - _totale_saldo = 1; - - if ((_tipostampa == 1) || (_tipostampa == 2)) - { - if ((almeno_un_record()) && (_totale_saldo != 0)) - { - _puoi_stampare = TRUE; - - if (_nummast == 3 || _nummast == 2) - { - _rw = crea_intestazione(_rw); - calcola_progressivi(); - _saldo_progressivi += _saldo_progre_prec; - _rw = stampa_progre_riporto(_rw); - } - } - else - { - _puoi_stampare = FALSE; - return FALSE; - } - } - else - if (_tipostampa == 3) - { - if (_nummast == 2 || _nummast == 3) - calcola_progressivi(); - if (_progredare == ZERO && _progreavere == ZERO && !almeno_un_record()) - { - _puoi_stampare = FALSE; - return FALSE; - } - else - { - _puoi_stampare = TRUE; - - if (_nummast == 3 || _nummast == 2) - { - _rw = crea_intestazione(_rw); - _saldo_progressivi += _saldo_progre_prec; - _rw = stampa_progre_riporto(_rw); - } - } - } - break; - - case LF_RMOV: - { - if (_nummast == 1 || _nummast == 3) - _rw = 1; - - // Ricerca la contropartita di quel movimento - - TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); - - _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); - _numrig = atoi (current_cursor()->curr(LF_RMOV).get(RMV_NUMRIG)); - - _gruppocontr = rmov.get_int (RMV_GRUPPOC); - _contocontr = rmov.get_int (RMV_CONTOC); - _sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC); - _g_contr = rmov.get(RMV_GRUPPOC); - _c_contr = rmov.get(RMV_CONTOC); - _s_contr = rmov.get(RMV_SOTTOCONTOC); - - // Stampa solo quelli che hanno anno esercizio uguale a quello specificato - // nella maschera. Se non viene specificato li stampa tutti - - _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); - _importo_str = _importo.string("###.###.###.###"); - _mov->setkey(1); - _mov->curr().zero(); - _mov->curr().put(MOV_NUMREG,_numreg); - _mov->read(); - if (_mov->bad()) - _mov->zero(); - _annoes = _mov->get_int(MOV_ANNOES); - _regiva = _mov->curr().get(MOV_REG); - _annoiva = _mov->curr().get_int(MOV_ANNOIVA); - - // Controlla se saldo e' diverso da 0 - - if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) - { - _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); - - if (_annomsk == 0) - { - _datareg = (_mov->curr().get(MOV_DATAREG)); - _datareg_stampa = _datareg; - } - else - if (_annomsk != 0) - { - _datareg = _mov->curr().get(MOV_DATACOMP); - _datareg_stampa = _mov->curr().get(MOV_DATAREG); - } - - provvis = _mov->curr().get(MOV_PROVVIS); - - _dataregs = _datareg_stampa.string(); - - if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) - { - if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) - { - // Determino l' anno di competenza dell' operazione in esame - - int anno = date2esc(_datareg_stampa); - if (anno != _annoes) - if (_numcarat == 1) - set_row (_rw, "@131g*"); - else - if (_numcarat == 2) - set_row (_rw, "@197g*"); - - if (_stampa_mov_prov && provvis.trim().not_empty()) - if (_numcarat == 1) - set_row(_rw, "@129gP"); - else - if (_numcarat == 2) - set_row(_rw, "@195gP"); - - _codcaus = _mov->curr().get(MOV_CODCAUS); - _tipodoc = _mov->curr().get(MOV_TIPODOC); - if (_stampatotiva && (_tmcf == 'C' || _tmcf == 'F')) - { - if (_tipodoc != "") - { - documenti_iva(); - _b.add_riga(_descrdociva,_importo, _natdoc); - if (_descrdociva.len() > _ddociva_len) - _ddociva_len = _descrdociva.len(); - } - } - _datadoc = (_mov->curr().get(MOV_DATADOC)); - _datadocs = _datadoc.string(); - _numdoc = _mov->curr().get(MOV_NUMDOC); - descrizione_causale(); - _descrizionemov = _mov->curr().get(MOV_DESCR); - _numgio = atol(_mov->curr().get(MOV_NUMGIO)); - - _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); - - if (_nummast == 1 || _nummast == 3) - { - if (_numcarat == 1) // Stampa 132 caratteri - { - if (_descrizione != "") - { - *_d23 = (const char*) _descrizione; - if (_descrizionemov != "") - { - *_d18 = (const char*) _descrizionemov; - set_row(_rw, "@42g#a", _d18); - set_row(_rw, "@61g#a", _d23); - } - else if (_descrizionemov == "") - { - *_d18 = (const char*) _descrcaus; - set_row(_rw, "@42g#a", _d18); - set_row(_rw, "@61g#a", _d23); - } - } - else if (_descrizione == "") - if (_descrizionemov != "") - { - *_d23 = (const char*) _descrizionemov; - *_d18 = (const char*) _descrcaus; - set_row (_rw,"@42g#a", _d18); - set_row (_rw,"@61g#a", _d23); - } - else - if (_descrizionemov == "") - { - conto(_gruppocontr,_contocontr,FALSE); - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - TString80 descr_contr = tc.descrizione(); - //set_row (1,"@42g%.18s", (const char*) _descrcaus); - //if (descr_contr != "Sconosciuto") - // set_row (1,"@61g%.23s", (const char*) descr_contr); - *_d18 = (const char*) _descrcaus; - set_row (_rw,"@42g#a", _d18); - if (descr_contr != "Sconosciuto") - { - *_d23 = (const char*) descr_contr; - set_row (_rw,"@61g#a", _d23); - } - } - } - else - if (_numcarat == 2) // Stampa 198 caratteri - { - if (_descrizione != "") - { - *_d30 = (const char*) _descrizione; - if (_descrizionemov != "") - { - *_d23 = (const char*) _descrizionemov; - set_row (_rw,"@46g#a", _d23); - set_row (_rw,"@70g#a", _d30); - } - else if (_descrizionemov == "") - { - //set_row (1,"@46g%.23s", (const char*) _descrcaus); - //set_row (1,"@70g%.30s", (const char*) _descrizione); - *_d23 = (const char*) _descrcaus; - set_row(_rw, "@46g#a", _d23); - set_row(_rw, "@70g#a", _d30); - } - } - else if (_descrizione == "") - if (_descrizionemov != "") - { - //set_row (1,"@46g%.23s", (const char*) _descrcaus); - //set_row (1,"@70g%.30s", (const char*) _descrizionemov); - *_d30 = (const char*) _descrizionemov; - *_d23 = (const char*) _descrcaus; - set_row (_rw,"@46g#a", _d23); - set_row (_rw,"@70g#a", _d30); - } - else - if (_descrizionemov == "") - { - conto(_gruppocontr,_contocontr,FALSE); - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - TString descr_contr = tc.descrizione(); - //set_row (1,"@46g%.23s", (const char*) _descrcaus); - //if (descr_contr != "Sconosciuto") - // set_row (1,"@70g%.30s", (const char*) descr_contr); - *_d23 = (const char*) _descrcaus; - set_row (_rw,"@46g#a", _d23); - if (descr_contr != "Sconosciuto") - { - *_d30 = (const char*) descr_contr; - set_row (_rw,"@70g#a", _d30); - } - } - } - } //if (_nummast == 1 || _nummast == 3) - - if (_nummast == 2) - { - TString d18,d23,d30; - - if (_numcarat == 1) // Stampa 132 caratteri - { - if (_descrizione != "") - { - d23 = _descrizione; - if (_descrizionemov != "") - d18 = _descrizionemov; - else if (_descrizionemov == "") - d18 = _descrcaus; - } - else if (_descrizione == "") - if (_descrizionemov != "") - { - d23 = _descrizionemov; - d18 = _descrcaus; - } - else - if (_descrizionemov == "") - { - conto(_gruppocontr,_contocontr,FALSE); - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - TString80 descr_contr = tc.descrizione(); - d18 = _descrcaus; - if (descr_contr != "Sconosciuto") - d23 = descr_contr; - } - - TParagraph_string d_18 (d18,18); - int i = 0; - const char* str; - while ( (str = d_18.get()) != NULL) - { - TString stringa = ""; - stringa << "@42g" << str; - setta_riga(i,stringa); - i++; - } - - TParagraph_string d_23 (d23,23); - i = 0; - while ( (str = d_23.get()) != NULL) - { - TString stringa = ""; - stringa << "@61g" << str; - setta_riga(i,stringa); - i++; - } - } - else - if (_numcarat == 2) // Stampa 198 caratteri - { - if (_descrizione != "") - { - d30 = _descrizione; - if (_descrizionemov != "") - d23 = _descrizionemov; - else if (_descrizionemov == "") - d23 = _descrcaus; - } - else if (_descrizione == "") - if (_descrizionemov != "") - { - d30 = _descrizionemov; - d23 = _descrcaus; - } - else - if (_descrizionemov == "") - { - conto(_gruppocontr,_contocontr,FALSE); - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - TString descr_contr = tc.descrizione(); - d23 = _descrcaus; - if (descr_contr != "Sconosciuto") - d30 = descr_contr; - } - - TParagraph_string d_23 (d23,23); - int i = 0; - const char* str; - while ( (str = d_23.get()) != NULL) - { - TString stringa = ""; - stringa << "@46g" << str; - setta_riga(i,stringa); - i++; - } - - TParagraph_string d_30 (d30,30); - i = 0; - while ( (str = d_30.get()) != NULL) - { - TString stringa = ""; - stringa << "@70g" << str; - setta_riga(i,stringa); - i++; - } - } - - _item = _riga.items(); - int riga,cur_row,diff; - - if ( (_conta_mastrini % 2) != 0 ) - { - riga = (printer().formlen() / 2); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - else - { - riga = printer().formlen(); //- 1; - cur_row = printer().formlen() - printer().rows_left(); - diff = riga - cur_row; - } - - int lim = 0; - if (_item > diff) - lim = diff; - else - lim = _item; - - _indice_array = 0; - - int k = _rw; - - for (int i = 0; i < lim; i++) - { - TString& data = (TString&)_riga[i]; - - int g1 = data.find("g",1); - int c1 = data.find("@",g1); - int g2 = data.find("g",c1); - - TString fmt1 = ""; - TString fmt2 = ""; - TString str1,str2; - - if (g1 != -1) - { - fmt1 = data.sub(0,g1+1); - fmt1 << "%s"; - str1 = data.sub(g1+1,c1); - } - if (c1 != -1) - { - fmt2 = data.sub(c1,g2+1); - fmt2 << "%s"; - str2 = data.sub(g2+1); - } - - if (fmt1 != "") - set_row (k,fmt1,(const char*) str1); - if (fmt2 != "") - set_row (k,fmt2,(const char*) str2); - - k++; - _indice_array++; - } - - //_riga.destroy(); - } //if (_nummast == 2) - - if (_sezione == "D") - { - _totale_periodo_dare += _importo; - _riporto_parziale_dare += _importo; - - if (_numcarat == 1) // Stampa 132 caratteri - set_row (_rw,"@85g%s", (const char*) _importo_str); - else - if (_numcarat == 2) // Stampa 198 caratteri - { - _saldo_progressivi += _importo; - _saldo_movimenti += _importo; - set_row (_rw,"@101g%s", (const char*) _importo_str); - } - } - else if (_sezione == "A") - { - _totale_periodo_avere += _importo; - _riporto_parziale_avere += _importo; - - if (_numcarat == 1) // Stampa 132 caratteri - set_row (_rw,"@101g%s", (const char*) _importo_str); - else - if (_numcarat == 2) // Stampa 198 caratteri - { - _saldo_progressivi -= _importo; - _saldo_movimenti -= _importo; - set_row (_rw,"@117g%s", (const char*) _importo_str); - } - } - - _saldo_progressivi_str=_saldo_progressivi.string("###.###.###.###"); - _saldo_movimenti_str=_saldo_movimenti.string("###.###.###.###"); - if (_numcarat == 2) - { - ricerca_regiva(); - _protiva = atol(_mov->curr().get(MOV_PROTIVA)); - if (_protiva != 0) - set_row (_rw,"@189g%5d", _protiva); - - if (_tipo < 3) - set_row (_rw,"@180g#t" , &_regiva); - _dataregrmov = current_cursor()->curr(LF_RMOV).get_date(RMV_DATAREG); - dataregrmovstring=_dataregrmov.string(); - -//Gestire la stampa di saldo_progressivi nella postprocess_page di RMOV - - rec = rmov.recno(); - rmov.next(); - gruppof = rmov.get_int(RMV_GRUPPO); - contof = rmov.get_int(RMV_CONTO); - sottocf = rmov.get_int(RMV_SOTTOCONTO); - datasucc = rmov.get_date(RMV_DATAREG); - datasuccstring=datasucc.string(); - if (((gruppof!=_gruppo)||(contof!=_conto)||(sottocf!=_sottoc))||(rmov.eof())) - datasucc = (""); - if (datasucc != _dataregrmov) - set_row (_rw,"@133g#t", &_saldo_progressivi_str); - rmov.readat(rec); - } - _rw = 1; - - return TRUE; - } - else - return FALSE; - } - else - return FALSE; - } - else - return FALSE; - break; - } - default: - break; - } - return TRUE; -} - -void TMastrini_application::set_page(int file, int counter) -{ - switch (file) - { - case LF_SALDI: - reset_print(); - break; - - case LF_RMOV: - reset_print(); - if (_numcarat == 1) - fai_stampa132(); - else if (_numcarat == 2) - fai_stampa198(); - break; - default: - break; - } -} - -print_action TMastrini_application::postprocess_page(int file, int counter) -{ - if (_nummast == 1 || _nummast == 3) - { - if (counter) - { - if (_nummast == 1) //Il salto pagina a rottura di mastrino viene - printer().formfeed(); //fatto solo quando seleziono un mastrino per pagina - - reset_print(); // per evitare che stampi di nuovo il totale prec. - _stampa_progressivi_si = TRUE; - _riporto_dare = ZERO; - _riporto_avere = ZERO; - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - _ddociva_len = 0; - - return NEXT_PAGE; - } - } - else - if (_nummast == 2) - { - int item_lista = _lista.items(); - - if (counter && item_lista == 0) - { - reset_print(); // per evitare che stampi di nuovo il totale prec. - _stampa_progressivi_si = TRUE; - _riporto_dare = ZERO; - _riporto_avere = ZERO; - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - _ddociva_len = 0; - - return NEXT_PAGE; - } - } - - switch (file) - { - case LF_SALDI: - { - if (_nummast == 1 || _nummast == 3) - { - if (_tipostampa == 3) - { - reset_print(); - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 2) - { - reset_print(); - if ((_totale_saldo != 0) && (_puoi_stampare)) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 1) - { - reset_print(); - if (_puoi_stampare) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - } - else - if (_nummast == 2) - { - if (!counter) - { - if (_numcarat == 1) - carica_array_totali132(); - else - if (_numcarat == 2) - carica_array_totali198(); - } - - if (_tipostampa == 3) - { - reset_print(); - if (_numcarat == 1) - stampa_totali132_II(); - else if (_numcarat == 2) - stampa_totali198_II(); - } - else if (_tipostampa == 2) - { - reset_print(); - if ((_totale_saldo != 0) && (_puoi_stampare)) - if (_numcarat == 1) - stampa_totali132_II(); - else if (_numcarat == 2) - stampa_totali198_II(); - } - else if (_tipostampa == 1) - { - reset_print(); - if (_puoi_stampare) - if (_numcarat == 1) - stampa_totali132_II(); - else if (_numcarat == 2) - stampa_totali198_II(); - } - - int item_lista = _lista.items(); - - if (item_lista == 0) - { - int righe_rimaste = righe_rimaste_da_stampare(); - - righe_rimaste = righe_rimaste - _rw; //_rw sono le righe dei totali gia' settate, mentre - //righe rimaste conteneva le righe senza quelle dei totali gia' settate - if (righe_rimaste > 0) - { - _rw++; //incremento la riga altrimenti copro l'ultimo totale settato con una riga bianca - - TString sep = " "; - - for (int i = 0; i < righe_rimaste; i++) - set_row(_rw++,"@0g%s", (const char*) sep); - } - } - } - -// _stampa_progressivi_si = TRUE; - _prima_volta = TRUE; - return REPEAT_PAGE; - } - case LF_RMOV: - force_setpage(); - break; - default: - break; - } - return NEXT_PAGE; -} - -print_action TMastrini_application::postprocess_print(int file, int counter) -{ - if (file == LF_SALDI) - { - _msk->reset(F_TIPOCF_INI); - - _msk->reset(F_GRUPPOINI); - - _msk->reset(F_CONTOINI_CONTO); - _msk->reset(F_CONTOINI_CLIENTE); - _msk->reset(F_CONTOINI_FORN); - - _msk->reset(F_SOTTOCINI_CONTO); - _msk->reset(F_SOTTOCINI_CLIENTE); - _msk->reset(F_SOTTOCINI_FORN); - - _msk->reset(F_DESCRINI_CONTO); - _msk->reset(F_DESCRINI_CLIENTE); - _msk->reset(F_DESCRINI_FORN); - - _msk->reset(F_TIPOCF_FINE); - - _msk->reset(F_GRUPPOFINE); - - _msk->reset(F_CONTOFINE_CONTO); - _msk->reset(F_CONTOFINE_CLIENTE); - _msk->reset(F_CONTOFINE_FORN); - - _msk->reset(F_SOTTOCFINE_CONTO); - _msk->reset(F_SOTTOCFINE_CLIENTE); - _msk->reset(F_SOTTOCFINE_FORN); - - _msk->reset(F_DESCRFINE_CONTO); - _msk->reset(F_DESCRFINE_CLIENTE); - _msk->reset(F_DESCRFINE_FORN); - } - return NEXT_PAGE; -} -// Stampa dei totali documenti iva se richiesta - -void TMastrini_application::stampa_totaliiva() -{ - real totale; - - if (_nummast == 1 || _nummast == 3) - { - _rw = 7; - _ddociva_len++; - TString fmt (format("@%dg", _ddociva_len)); - fmt << "%15s"; - - if (_stampatotiva) - for (int j = 0; j < _b.items(); j++) - { - TDociva& riga = (TDociva&)_b[j]; - set_row(_rw+j, "@0g%s",(const char*) riga._descrdoc); - totale = riga._totdociva; - TString string = totale.string("###.###.###.###"); - set_row(_rw+j, fmt, (const char*)string); - } - - _b.destroy(); - } -} - -// Ricerca della descrizione relativa al codice causale di MOV.dta -// sull'archivio CAUS.dta - -void TMastrini_application::descrizione_causale() -{ - _caus->setkey(1); - _caus->curr().zero(); - _caus->curr().put(CAU_CODCAUS, _codcaus); - _caus->read(); - if (_caus->bad()) - _caus->zero(); - _descrcaus = _caus->curr().get(CAU_DESCR); -} - -// Ricerca sulla tabella dei tipi documento, la descrizione e la natura del -// documento, accedendovi tramite il tipo documento trovato su MOV.dta - -void TMastrini_application::documenti_iva() -{ - TString dep; - - _tabtpd->curr().zero(); - dep << format ("%2s",(const char*) _tipodoc); - _tabtpd->curr().put("CODTAB", (const char*) dep); - _tabtpd->read(); - _descrdociva = _tabtpd->curr().get("S0"); - _natdoc = atoi(_tabtpd->curr().get("I0")); -} - -void TMastrini_application::ricerca_regiva() -{ - TString16 dep; - - _tabreg->curr().zero(); - dep << format("%04d", _annoiva); - dep << format("%3s" , (const char*) _regiva); - _tabreg->curr().put("CODTAB", (const char*) dep); - _tabreg->read(); - _tipo = _tabreg->get_int("I0"); -} - -bool TMastrini_application::preprocess_print(int file, int counter) -{ - if (file == LF_SALDI) - { - _g_prec = 0; - _c_prec = 0; - _s_prec = 0; - - _saldo_periodo = ZERO; - _totale_periodo_dare = ZERO; - _totale_periodo_avere = ZERO; - _saldo_progre = ZERO; - _totprogre_dare = ZERO; - _totprogre_avere = ZERO; - _saldo_progre_al = ZERO; - _totprogre_dare_al = ZERO; - _totprogre_avere_al = ZERO; - _progredare = ZERO; - _progreavere = ZERO; - _totale_prima_dare = ZERO; - _totale_prima_avere = ZERO; - _saldo_movimenti = ZERO; - _saldo_progressivi = ZERO; - _saldo_progre_prec = ZERO; - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - _protiva = 0; - - _prima_volta = TRUE; - - _stampa_progressivi_si = TRUE; - } - - return TRUE; -} - -bool TMastrini_application::set_print(int) -{ - KEY tasto; - TLocalisamfile* fl; - TString data1,data2; - - _puoi_stampare = TRUE; - - _msk->set_handler (F_DATAINI ,data_inizio); - _msk->set_handler (F_DATAFINE ,data_fine); - - tasto = _msk->run(); - - if (tasto == K_ENTER) - { - _annomsk = atoi(_msk->get(F_ANNO)); - - _stampaprogre = (bool)(_msk->get(F_STAMPAPROGRE) == "X"); - _stampatotiva = (bool)(_msk->get(F_STAMPATOTIVA) == "X"); - _stampanum = atoi(_msk->get(F_STAMPANUM)); - _stampa_mov_prov = (bool)(_msk->get(F_STAMPAMOVPROV) == "X"); - int gruppoini = atoi(_msk->get(F_GRUPPOINI)); - int contoini = atoi(_msk->get(F_CONTOINI_CONTO)); - long sottocontoini = atol(_msk->get(F_SOTTOCINI_CONTO)); - int gruppofine = atoi(_msk->get(F_GRUPPOFINE)); - int contofine = atoi(_msk->get(F_CONTOFINE_CONTO)); - long sottocontofine = atol(_msk->get(F_SOTTOCFINE_CONTO)); - _tipostampa = atoi(_msk->get(F_TIPOSTAMPA)); - _numcarat = atoi(_msk->get(F_NUMCARAT)); - int formato = atoi(_msk->get(F_FORMATO)); - _nummast = atoi(_msk->get(F_NUMMAST)); - _codice_ditta = get_firm(); - - ricerca_dati_ditta(); - - if (_annomsk != 0) - _anno_corrente = _annomsk; - else - if (_annomsk == 0) - _anno_corrente = _anno_ghost; - - _anno_precedente = _anno_corrente - 1; - -// Scelta del formato e del numero di mastrini per pagina 1 o 2 - - //if (nummast == 1) - // crt = formato; - //else - // crt = (formato / 2); - - //printer().formlen(crt); - -//Crea il cursore su gruppo, conto e sottoconto del file RMOV - - reset_files(); //resetta l'albero di stampa - add_file(LF_SALDI); - add_file(LF_RMOV,LF_SALDI); - - select_cursor(_cur1); - fl = &(current_cursor()->file(LF_SALDI)); - TRectype da (fl->curr()); - TRectype a (fl->curr()); - - da.zero(); - a.zero(); - - da.put(SLD_GRUPPO,gruppoini); - da.put(SLD_CONTO,contoini); - da.put(SLD_SOTTOCONTO,sottocontoini); - - a.put(SLD_GRUPPO,gruppofine); - a.put(SLD_CONTO,contofine); - a.put(SLD_SOTTOCONTO,sottocontofine); - - current_cursor()->setregion(da, a); - - if (_stampatotiva) - _b.destroy(); - - _inizio_stampa = TRUE; - _numero_pag = 1; - _pagina = 1; - _cambia_mastrino = FALSE; - _rw = 0; - _conta_mastrini = 0; - _indice_lista = 0; - _ddociva_len = 0; - - _riga.destroy(); - _lista.destroy(); - - switch (_tipostampa) - { - case 1: _totale_saldo = 1; - break; - case 2: _totale_saldo = 0; - break; - case 3: _totale_saldo = 1; - break; - default: break; - } - - enable_print_menu(); - - enable_link("Collegamento prima nota: ", 'r'); - - return TRUE; - } - else - return FALSE; -} - -void TMastrini_application::data_fine_esercizio(int anno) -{ - TString16 dep; - - _tabesc->curr().zero(); - dep << format ("%04d", anno); - _tabesc->curr().put("CODTAB", (const char*) dep); - _tabesc->read(); - _data_finese = _tabesc->curr().get("D1"); - _data_inizioese = _tabesc->curr().get("D0"); -} - -void TMastrini_application::preprocess_header() -{ - if (_nummast == 1) - { - if (_tipostampa == 3) - crea_intestazione(); - else - if (_tipostampa == 2) - { - if ((_totale_saldo != 0) && (_puoi_stampare)) - crea_intestazione(); - } - else if (_tipostampa == 1) - if (_puoi_stampare) - crea_intestazione(); - } -} - -void TMastrini_application::conto(int gruppo, int conto, bool no_contropartita) -{ - TLocalisamfile pconti(LF_PCON); - - pconti.setkey(1); - pconti.zero(); - pconti.put(PCN_GRUPPO, gruppo); - pconti.put(PCN_CONTO , conto); - pconti.read(); - if (pconti.bad()) - pconti.zero(); - - if (no_contropartita) - { - _indbil = pconti.get_int(PCN_INDBIL); - _tmcf = pconti.get_char(PCN_TMCF); - } - else - _tipo_contr = pconti.get_char(PCN_TMCF); -} - -void TMastrini_application::ricerca_dati_ditta() -{ - long app; - - _nditte->setkey(1); - _nditte->curr().zero(); - _nditte->curr().put(NDT_CODDITTA,_codice_ditta); - _nditte->read(); - app=_nditte->curr().get_long(NDT_CODDITTA); - _ragsoc=_nditte->curr().get(NDT_RAGSOC); - - _unloc->setkey(1); - _unloc->curr().zero(); - _unloc->curr().put(ULC_CODDITTA,app); - _unloc->curr().put(ULC_CODULC,"1"); - _unloc->read(); - _indulc=_unloc->curr().get(ULC_INDULC); - _civulc=_unloc->curr().get(ULC_CIVULC); - _capulc=_unloc->curr().get(ULC_CAPULC); - _comulc=_unloc->curr().get(ULC_COMULC); - - _comuni->setkey(1); - _comuni->zero(); - _comuni->put(COM_COM,_comulc); - _comuni->read(); - if (_comuni->good()) - { - _com=_comuni->get(COM_DENCOM); - _prov=_comuni->get(COM_PROVCOM); - } - else - { - _com=""; - _prov=""; - } -} - -// Crea l'intestazione per la stampa a 132 e a 198 caratteri - -void TMastrini_application::crea_intestazione() -{ - TString sep(132),sep1(198); - - reset_header(); - - if (_cambia_mastrino) - { - _pagina = 1; - _cambia_mastrino = FALSE; - } - - if (_numcarat == 1) - { - sep << "Pag. " << _pagina; - sep.right_just(132); - set_header(1,(const char*) sep); - sep =""; - set_header(2,"@1g%s",(const char*) sep); - //set_header(1,"@126gPag. %2d", _numero_pag++); - } - else if (_numcarat == 2) - { - sep1 << "Pagina " << _pagina; - sep1.right_just(198); - set_header(1,(const char*) sep1); - sep1 =""; - set_header(2,"@1g%s",(const char*) sep1); - //set_header(1,"@190gPagina %2d", _numero_pag++); - } - - _pagina++; - - set_header (1, "@0gDITTA@6g%5ld", _codice_ditta); - set_header (1, "@12g%-.45s", (const char*) _ragsoc); - set_header (1, "@59g%-.25s", (const char*) _indulc); - set_header (1, "@86g%-.9s", (const char*) _civulc); - set_header (1, "@97g%-.5s", (const char*) _capulc); - set_header (1, "@103g%-.18s", (const char*) _com); - set_header (1, "@122g%-.3s", (const char*) _prov); - - set_header (3, "@0gSottoconto@12g%d", _gruppo); - set_header (3, "@16g%d", _conto); - set_header (3, "@20g%ld", _sottoc); - - if (_tmcf == 'C') - _tipo_mask = 1; - else if (_tmcf == 'F') - _tipo_mask = 2; - else if (_tmcf == '\0') - _tipo_mask = 3; - switch (_tipo_mask) - { - case 1: ricerca_clifo(); - break; - case 2: ricerca_clifo(); - break; - case 3: ricerca_gruppo(); - break; - default: break; - } - - if (_numcarat == 1) - { - sep.fill('-'); //Stampa 132 - (sep(132)) - set_header (6, (const char *) sep); - set_header (7,"Operazione@19gDocumento@117gContro@131gA"); - if (_stampa_mov_prov) - set_header(7,"@129gM"); - set_header (8,"Data"); - if (_stampanum < 3) - set_header (8,"@11gnumero"); - set_header (8,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); - if (_stampa_mov_prov) - set_header(8,"@129gP"); - sep.fill('-'); - set_header (9, (const char *) sep); - } - else if (_numcarat == 2) - { - sep1.fill('-'); //Stampa 198 - (sep1(198)) - set_header (6,"@0g%s", (const char *) sep1); - set_header (7,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); - if (_stampa_mov_prov) - set_header(7,"@195gM"); - set_header (8,"Data"); - if (_stampanum < 3) - set_header (8,"@11gnumero"); - set_header (8,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere@133gSaldo progress.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); - if (_stampa_mov_prov) - set_header(8,"@195gP"); - sep1.fill('-'); - set_header (9,"@0g%s", (const char *) sep1); - } - - calcola_progressivi(); - _saldo_progressivi += _saldo_progre_prec; - - if (_stampa_progressivi_si) - { - if (_numcarat == 1) - { - TString string = _saldo_progre_prec.string("###.###.###.###"); - set_header (10,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); - string = _progredare.string("###.###.###.###"); - set_header (10,"@85g%15s",(const char*) string); - string = _progreavere.string("###.###.###.###"); - set_header (10,"@101g%15s",(const char*) string); - } - if (_numcarat == 2) - { - TString string = _progredare.string("###.###.###.###"); - set_header (10,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); - string = _progreavere.string("###.###.###.###"); - set_header (10,"@117g%15s",(const char*) string); - string = _saldo_progre_prec.string("###.###.###.###"); - set_header (10,"@133g%15s",(const char*) string); - } - _riporto_dare = _progredare; - _riporto_avere = _progreavere; - _stampa_progressivi_si = FALSE; - } - else - { - _riporto_dare += _riporto_parziale_dare; - _riporto_avere += _riporto_parziale_avere; - if (_numcarat == 1) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_header (10,"@32gA RIPORTO@85g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_header (10,"@101g%15s",(const char*) string); - } - if (_numcarat == 2) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_header (10,"@32gA RIPORTO@101g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_header (10,"@117g%15s",(const char*) string); - } - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - } - if (_numcarat == 1) - { - sep =""; - set_header(11,"@1g%s",(const char*) sep); - } - else if (_numcarat == 2) - { - sep1 =""; - set_header(11,"@1g%s",(const char*) sep1); - } -} - -int TMastrini_application::crea_intestazione(int start_riga) -{ - TString sep(132),sep1(198); - int r = start_riga + 2; - - reset_header(); - - _conta_mastrini++; - - if (_nummast == 2) - if (_cambia_mastrino) - { - _numero_pag = 1; - _cambia_mastrino = FALSE; - } - - if (_numcarat == 1) - set_row(r,"@126gPag. %2d", _numero_pag++); - else if (_numcarat == 2) - set_row(r,"@190gPagina %2d", _numero_pag++); - - set_row (r, "@0gDITTA@6g%5ld", _codice_ditta); - set_row (r, "@12g%-45s", (const char*) _ragsoc); - set_row (r, "@59g%-25s", (const char*) _indulc); - set_row (r, "@86g%-9s", (const char*) _civulc); - set_row (r, "@97g%-5s", (const char*) _capulc); - set_row (r, "@103g%-18s", (const char*) _com); - set_row (r, "@122g%-3s", (const char*) _prov); - r += 2; - set_row (r, "@0gSottoconto@12g%d", _gruppo); - set_row (r, "@16g%d", _conto); - set_row (r, "@20g%ld", _sottoc); - - if (_tmcf == 'C') - _tipo_mask = 1; - else if (_tmcf == 'F') - _tipo_mask = 2; - else if (_tmcf == '\0') - _tipo_mask = 3; - switch (_tipo_mask) - { - case 1: r = ricerca_clifo(r); - break; - case 2: r = ricerca_clifo(r); - break; - case 3: r = ricerca_gruppo(r); - break; - default: break; - } - - r++; - - if (_numcarat == 1) - { - sep.fill('-'); //Stampa 132 - (sep(132)) - set_row (r++,"@1g%s", (const char *) sep); - set_row (r++,"Operazione@19gDocumento@117gContro@131gA"); - if (_stampa_mov_prov) - set_header(r-1,"@129gM"); - set_row (r,"Data"); - if (_stampanum < 3) - set_row (r,"@11gnumero"); - set_row (r++,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); - if (_stampa_mov_prov) - set_header(r-1,"@129gP"); - sep.fill('-'); - set_row (r++,"@1g%s", (const char *) sep); - } - else if (_numcarat == 2) - { - sep1.fill('-'); //Stampa 198 - (sep1(198)) - set_row (r++,"@0g%s", (const char *) sep1); - set_row (r++,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); - if (_stampa_mov_prov) - set_row(r-1,"@195gM"); - set_row (r,"Data"); - if (_stampanum < 3) - set_row (r,"@11gnumero"); - set_row (r,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere"); - set_row (r++,"@133gSaldo progress.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); - if (_stampa_mov_prov) - set_row (r-1,"@195gP"); - sep1.fill('-'); - set_row (r++,"@0g%s", (const char *) sep1); - } - - return r; -} - -void TMastrini_application::stampa_progre_riporto() -{ - TString sep(132),sep1(198); - - if (_nummast == 1 || _nummast == 3) - _rw = 1; - - if (_stampa_progressivi_si) - { - stampa_progressivi(); - _riporto_dare = _progredare; - _riporto_avere = _progreavere; - _stampa_progressivi_si = FALSE; - } - else - { - _riporto_dare += _riporto_parziale_dare; - _riporto_avere += _riporto_parziale_avere; - if (_numcarat == 1) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_row (_rw,"@32gA RIPORTO@85g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_row (_rw++,"@101g%15s",(const char*) string); - } - if (_numcarat == 2) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_row (_rw,"@32gA RIPORTO@101g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_row (_rw++,"@117g%15s",(const char*) string); - } - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - } - if (_numcarat == 1) - { - sep =""; - set_row(_rw,"@1g%s",(const char*) sep); - } - else if (_numcarat == 2) - { - sep1 =""; - set_row(_rw,"@1g%s",(const char*) sep1); - } -} - -int TMastrini_application::stampa_progre_riporto(int start_riga) -{ - TString sep(132),sep1(198); - int r = start_riga; - - if (_stampa_progressivi_si) - { - r = stampa_progressivi(r); - _riporto_dare = _progredare; - _riporto_avere = _progreavere; - _stampa_progressivi_si = FALSE; - } - else - { - _riporto_dare += _riporto_parziale_dare; - _riporto_avere += _riporto_parziale_avere; - if (_numcarat == 1) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_row (r,"@32gA RIPORTO@85g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_row (r++,"@101g%15s",(const char*) string); - } - if (_numcarat == 2) - { - TString string = _riporto_dare.string("###.###.###.###"); - set_row (r,"@32gA RIPORTO@101g%15s",(const char*) string); - string = _riporto_avere.string("###.###.###.###"); - set_row (r++,"@117g%15s",(const char*) string); - } - _riporto_parziale_dare = ZERO; - _riporto_parziale_avere = ZERO; - } - if (_numcarat == 1) - { - sep =""; - set_row(r++,"@1g%s",(const char*) sep); - } - else if (_numcarat == 2) - { - sep1 =""; - set_row(r++,"@1g%s",(const char*) sep1); - } - return r; -} - -void TMastrini_application::calcola_progressivi_al() -{ - long record,sottoc,annoes; - int gruppo,conto; - TDate datareg, datacomp; - TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); - char sezione; - real importo; - TDate data; - - - record = rmov.recno(); - rmov.zero(); - rmov.put(RMV_GRUPPO, _gruppo); - rmov.put(RMV_CONTO, _conto); - rmov.put(RMV_SOTTOCONTO, _sottoc); - for (rmov.read();!rmov.eof() ;rmov.next()) - { - annoes = rmov.get_int (RMV_ANNOES); - datareg = rmov.get_date(RMV_DATAREG); - sezione = rmov.get (RMV_SEZIONE)[0]; - importo = rmov.get_real(RMV_IMPORTO); - long numreg = rmov.get_long(RMV_NUMREG); - - _mov->setkey(1); - _mov->curr().zero(); - _mov->curr().put(MOV_NUMREG,numreg); - _mov->read(); - if (_mov->bad()) - _mov->zero(); - datacomp = (_mov->curr().get(MOV_DATACOMP)); - - if (_annomsk == 0) - { - datareg = rmov.get_date(RMV_DATAREG); - data = _inizioes; - } - else - if (_annomsk != 0) - { - datareg = datacomp; - data = _data_inizioese; - } - - gruppo = rmov.get_int(RMV_GRUPPO); - conto = rmov.get_int(RMV_CONTO); - sottoc = rmov.get_long(RMV_SOTTOCONTO); - if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) - break; - else if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data)&&(datareg < _data_ini)) //Legge movimenti con data < data iniziale - if (sezione == 'D') - _totale_prima_dare += importo; - else if (sezione == 'A') - _totale_prima_avere += importo; - } - rmov.readat(record); -} - -void TMastrini_application::calcola_progressivi() -{ - TLocalisamfile saldi(LF_SALDI, FALSE); - real pdaresca,paveresca,pdarescap,paverescap; - real progdare_attuale,progavere_attuale,progdare_prec,progavere_prec; - real saldo,progredare_eseprec,progreavere_eseprec,pdarep,paverep; - char salini; - - saldo = ZERO; - pdarep = ZERO; - paverep = ZERO; - pdaresca = ZERO; - paveresca = ZERO; - pdarescap = ZERO; - paverescap = ZERO; - -// Ricerca sull'archivio saldi dei record con gruppo,conto,sottoconto -// uguali a quelli di rmov per il calcolo dei progressivi precedenti - - TRectype record(saldi.curr()); - - record.zero(); - record.put(SLD_GRUPPO, _gruppo); - record.put(SLD_CONTO, _conto); - record.put(SLD_SOTTOCONTO, _sottoc); - - saldi.setkey(2); - - saldi.zero(); - saldi.put(SLD_GRUPPO, _gruppo); - saldi.put(SLD_CONTO, _conto); - saldi.put(SLD_SOTTOCONTO, _sottoc); - - for (saldi.read(_isgteq); saldi.good(); saldi.next()) - { - if (saldi.curr() != record) - break; - - int annoes_saldi = saldi.curr().get_int(SLD_ANNOES); - -//Calcola i progressivi dell'esercizio attuale - - if (annoes_saldi == _anno_corrente) - { - pdaresca = saldi.get_real(SLD_PDARESCA); - paveresca = saldi.get_real(SLD_PAVERESCA); - progdare_attuale = saldi.get_real(SLD_PDARE); - progavere_attuale = saldi.get_real(SLD_PAVERE); - saldo = saldi.get_real(SLD_SALDO); - salini = saldi.get(SLD_FLAGSALINI)[0]; - _ultima_data_reg = saldi.get_date(SLD_DATAULMOV); - } - -//Calcola i progressivi dell'esercizio precedente - - if (annoes_saldi == _anno_precedente) - { - pdarescap = saldi.get_real(SLD_PDARESCA); - pdarep = saldi.get_real(SLD_PDARE); - paverescap = saldi.get_real(SLD_PAVERESCA); - paverep = saldi.get_real(SLD_PAVERE); - } - -// Se il saldo dell'esercizio attuale e' diverso da 0 allora significa che -// quello corrisponde al saldo finale dell'esercizio precedente. Per ottenere -// i progressivi dell'esercizio precedente devo a questo punto sommare i -// progressivi dell'esercizio e i progressivi di quelli scaricati, tenendo -// conto del flag salini per sapere se il saldo e' dare oppure avere. - -/* - if (_annomsk != 0 && _anno_corrente == annoes_saldi) - { - if (saldo != ZERO) - { - if (salini == 'D') - { - progredare_eseprec = saldo;// + pdarescap + pdarep; - progdare_prec = saldo; - } - else if (salini == 'A') - { - progreavere_eseprec = saldo;// + paverescap + paverep; - progavere_prec = saldo; - } - } - } -*/ - } // FOR - -//Se il saldo dell'esercizio attuale non e' diverso da zero, allora il saldo -// finale dell'esercizio precedente devo calcolarmelo tenendo conto dell'indbil - - if (_annomsk != 0 /*&& saldo == ZERO*/) - { - if ((_indbil == 1) || (_indbil == 2) || (_indbil == 5)) - { - const TRecnotype pos = saldi.recno(); - saldo = _sld->saldofin_esprec(_anno_corrente,_gruppo,_conto,_sottoc); - saldi.readat(pos); - - if (saldo> ZERO) - { - progredare_eseprec = saldo;// + pdarescap + pdarep; - progdare_prec = saldo; - } - else if (saldo < ZERO) - { - saldo = -saldo; - progreavere_eseprec = saldo;// + paverescap + paverep; - progavere_prec = saldo; - } - } - } - - calcola_progressivi_al(); - -//Calcolo dei progressivi precedenti: somma di tutti quei movimenti di rmov -//che hanno la data di registrazione inferiore alla data di inizio stampa, -//dei progressivi dell'anno esercizio precedente, e dei progressivi dei -//movimenti scaricati dell'esercizio attuale. - - _progredare = pdaresca + progredare_eseprec + _totale_prima_dare; - _progreavere = paveresca + progreavere_eseprec + _totale_prima_avere; - _saldo_progre_prec = _progredare - _progreavere; - -//Calcolo dei progressivi al - -//Se sulla maschera e' stato selezionato il controllo competenza esercizio -//Sommo i progressivi dell'esercizio precedente e quelli dell'esercizio attuale -//altrimenti solo quelli dell'esercizio attuale - - if (_annomsk != 0) - { - _totprogre_dare_al = progdare_attuale + progdare_prec; - _totprogre_avere_al = progavere_attuale + progavere_prec; - } - else - { - _totprogre_dare_al = progdare_attuale; - _totprogre_avere_al = progavere_attuale; - } -} - -void TMastrini_application::stampa_progressivi() -{ - if (_nummast == 1 || _nummast == 3) - _rw = 1; - - if (_numcarat == 1) - { - TString string = _saldo_progre_prec.string("###.###.###.###"); - set_row (_rw,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); - string = _progredare.string("###.###.###.###"); - set_row (_rw,"@85g%15s",(const char*) string); - string = _progreavere.string("###.###.###.###"); - set_row (_rw++,"@101g%15s",(const char*) string); - } - - if (_numcarat == 2) - { - TString string = _progredare.string("###.###.###.###"); - set_row (_rw,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); - string = _progreavere.string("###.###.###.###"); - set_row (_rw,"@117g%15s",(const char*) string); - string = _saldo_progre_prec.string("###.###.###.###"); - set_row (_rw++,"@133g%15s",(const char*) string); - } -} - -int TMastrini_application::stampa_progressivi(int start_riga) -{ - int r = start_riga; - - if (_numcarat == 1) - { - TString string = _saldo_progre_prec.string("###.###.###.###"); - set_row (r,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); - string = _progredare.string("###.###.###.###"); - set_row (r,"@85g%15s",(const char*) string); - string = _progreavere.string("###.###.###.###"); - set_row (r++,"@101g%15s",(const char*) string); - } - - if (_numcarat == 2) - { - TString string = _progredare.string("###.###.###.###"); - set_row (r,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); - string = _progreavere.string("###.###.###.###"); - set_row (r,"@117g%15s",(const char*) string); - string = _saldo_progre_prec.string("###.###.###.###"); - set_row (r++,"@133g%15s",(const char*) string); - } - - return r; -} - -// Se la ricerca selezionata nella maschera e' per clienti, oppure fornitori, // allora ricerco su CLIFO i relativi dati, e su PCON il relativo gruppo,conto,// sottoconto e IV direttiva CEE - -void TMastrini_application::ricerca_clifo() -{ - TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; - TLocalisamfile clifo(LF_CLIFO); - TLocalisamfile pconti(LF_PCON); - TString16 dataini,datafine; - TString descriz,descriz2; - int numrivd; - - clifo.setkey(1); - clifo.zero(); - clifo.put(CLI_TIPOCF, _tmcf); - clifo.put(CLI_CODCF, _sottoc); - clifo.read(); - if (clifo.bad()) - clifo.zero(); - TConto tc (_gruppo,_conto,_sottoc,_tmcf); - - ragsoc = tc.descrizione(); - paiv = clifo.get(CLI_PAIV); - cofi = clifo.get(CLI_COFI); - indcf = clifo.get(CLI_INDCF); - indcf.trim(); - indcf << " " << clifo.get(CLI_CIVCF); - capcf = clifo.get(CLI_CAPCF); - ptel = clifo.get(CLI_PTEL); - tel = clifo.get(CLI_TEL); - statocf = clifo.get(CLI_STATOCF); - comcf = clifo.get(CLI_COMCF); - - _comuni->setkey(1); - _comuni->zero(); - _comuni->put(COM_STATO, statocf); - _comuni->put(COM_COM, comcf); - _comuni->read(); - if (_comuni->good()) - { - dencom = _comuni->get(COM_DENCOM); - provcom = _comuni->get(COM_PROVCOM); - } - else - { - dencom=""; - provcom=""; - } - - pconti.setkey(1); - pconti.zero(); - pconti.put(PCN_GRUPPO, _gruppo); - pconti.put(PCN_CONTO, _conto); - pconti.read(); - _sezivd = pconti.get_char(PCN_SEZIVD); - _lettivd = pconti.get_char(PCN_LETTIVD); - numrivd = pconti.get_int(PCN_NUMRIVD); - _numrivd = itor(numrivd); - _numivd = pconti.get_int(PCN_NUMIVD); - - descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); - - if (_numivd != 0) //Ora devo stampare la descrizione del livello della - { //classe immediatamente precedente a quello appena - if (_numrivd != "") //stampato - descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); - else - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - } - else - if (_numrivd != "") - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - else - descriz2 = ""; - - set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); - set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); - set_header(3, "@91g%-.41s",(const char*) ragsoc); - set_header(4, "Classe@8g%c", _lettivd); - set_header(4, "@10g%-8s", (const char*) _numrivd); - if (_numivd != 0) - set_header(4, "@19g%2d", _numivd); - if (descriz2 != "") - { - set_header(4,"@23g%-50s",(const char*) descriz2); - set_header(4,"@80g%-50s",(const char*) descriz); - } - else - set_header(4,"@23g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - datafine = _data_fine.string(); - - if (_annomsk == 0) - { - set_header (5, "Periodo@10g%s", (const char*) dataini); - set_header (5, "@22g%s", (const char*) datafine); - } - else - { - set_header (5, "Comp. da@9g%s", (const char*) dataini); - set_header (5, "@20ga@22g%s", (const char*) datafine); - } - - set_header (5, "@33gP.I.@37g%-11s",(const char*) paiv); - set_header (5, "@49gCF@52g%-16s",(const char*) cofi); - set_header (5, "@69g%-.25s",(const char*) indcf); - set_header (5, "@95g%-5s",(const char*) capcf); - set_header (5, "@101g%-.24s",(const char*) dencom); - set_header (5, "@126g%-5s",(const char*) provcom); - - if (_numcarat == 2) - { - set_header (5,"@134g%-4s",(const char*) ptel); - if (tel != "") - set_header (5,"@138g/@139g%-10s",(const char*) tel); - } -} - -int TMastrini_application::ricerca_clifo(int start) -{ - TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; - TLocalisamfile clifo(LF_CLIFO); - TLocalisamfile pconti(LF_PCON); - TString16 dataini,datafine; - TString descriz,descriz2; - int numrivd; - int r = start; - - clifo.setkey(1); - clifo.zero(); - clifo.put(CLI_TIPOCF, _tmcf); - clifo.put(CLI_CODCF, _sottoc); - clifo.read(); - if (clifo.bad()) - clifo.zero(); - TConto tc (_gruppo,_conto,_sottoc,_tmcf); - - ragsoc = tc.descrizione(); - paiv = clifo.get(CLI_PAIV); - cofi = clifo.get(CLI_COFI); - indcf = clifo.get(CLI_INDCF); - indcf.trim(); - indcf << " " << clifo.get(CLI_CIVCF); - capcf = clifo.get(CLI_CAPCF); - ptel = clifo.get(CLI_PTEL); - tel = clifo.get(CLI_TEL); - statocf = clifo.get(CLI_STATOCF); - comcf = clifo.get(CLI_COMCF); - - _comuni->setkey(1); - _comuni->zero(); - _comuni->put(COM_STATO, statocf); - _comuni->put(COM_COM, comcf); - _comuni->read(); - if (_comuni->good()) - { - dencom = _comuni->get(COM_DENCOM); - provcom = _comuni->get(COM_PROVCOM); - } - else - { - dencom=""; - provcom=""; - } - - pconti.setkey(1); - pconti.zero(); - pconti.put(PCN_GRUPPO, _gruppo); - pconti.put(PCN_CONTO, _conto); - pconti.read(); - _sezivd = pconti.get_char(PCN_SEZIVD); - _lettivd = pconti.get_char(PCN_LETTIVD); - numrivd = pconti.get_int(PCN_NUMRIVD); - _numrivd = itor(numrivd); - _numivd = pconti.get_int(PCN_NUMIVD); - - descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); - - if (_numivd != 0) //Ora devo stampare la descrizione del livello della - { //classe immediatamente precedente a quello appena - if (_numrivd != "") //stampato - descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); - else - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - } - else - if (_numrivd != "") - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - else - descriz2 = ""; - - set_row (r,"@27g%-30s",(const char*) descrizione_gruppo()); - set_row (r,"@59g%-30s",(const char*) descrizione_conto()); - set_row(r++, "@91g%-30s",(const char*) ragsoc); - set_row(r, "Classe@8g%c", _lettivd); - set_row(r, "@10g%-8s", (const char*) _numrivd); - if (_numivd != 0) - set_row(r, "@19g%2d", _numivd); - if (descriz2 != "") - { - set_row(r,"@23g%-50s",(const char*) descriz2); - set_row(r,"@80g%-50s",(const char*) descriz); - } - else - set_row(r++,"@23g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - datafine = _data_fine.string(); - - if (_annomsk == 0) - { - set_row (r, "Periodo@10g%s", (const char*) dataini); - set_row (r, "@22g%s", (const char*) datafine); - } - else - { - set_row (r, "Comp. da@9g%s", (const char*) dataini); - set_row (r, "@20ga@22g%s", (const char*) datafine); - } - - set_row (r, "@33gP.I.@37g%-11s",(const char*) paiv); - set_row (r, "@49gCF@52g%-16s",(const char*) cofi); - set_row (r, "@69g%-25s",(const char*) indcf); - set_row (r, "@95g%-5s",(const char*) capcf); - set_row (r, "@101g%-24s",(const char*) dencom); - set_row (r, "@126g%-5s",(const char*) provcom); - - if (_numcarat == 2) - { - set_row (r,"@134g%-4s",(const char*) ptel); - if (tel != "") - set_row (r++,"@138g/@139g%-10s",(const char*) tel); - } - return r; -} - - -// Se la ricerca selezionata sulla maschera e' per gruppo, conto, sottoconto -// ricerca i corrispondenti su PCON, con relativa IV direttiva CEE - -void TMastrini_application::ricerca_classe_IV(bool scelta) -{ - TLocalisamfile pconti(LF_PCON); - - pconti.setkey(1); - pconti.zero(); - pconti.put(PCN_GRUPPO, _gruppo); - pconti.put(PCN_CONTO, _conto); - if (scelta) - pconti.put(PCN_SOTTOCONTO, _sottoc); - pconti.read(); - _sezivd = pconti.get_char(PCN_SEZIVD); - _lettivd = pconti.get_char(PCN_LETTIVD); - _numrivd_int = pconti.get_int (PCN_NUMRIVD); - _numrivd = itor(_numrivd_int); - _numivd = pconti.get_int (PCN_NUMIVD); -} - -void TMastrini_application::ricerca_gruppo() -{ - TString80 descr,descriz,descriz2,dep; - TString dataini,datafine; - - ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto - - if (_sezivd == '0') //Non esiste a livello di sottoconto - ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto - - descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); - if (_numivd != 0) //Ora devo stampare la descrizione del livello della - { //classe immediatamente precedente a quello appena - if (_numrivd != "") //stampato - descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); - else - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - } - else - if (_numrivd != "") - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - else - descriz2 = ""; - - set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); - set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); - - set_header(3,"@91g%-.41s",(const char*) descrizione_sottoconto()); - set_header(4, "@0gClasse@12g%c", _lettivd); - set_header(4, "@14g%-8s",(const char*) _numrivd); - if (_numivd != 0) - set_header(4, "@23g%d", _numivd); - if (descriz2 != "") - { - set_header(4,"@27g%-50s",(const char*) descriz2); - set_header(4,"@80g%-50s",(const char*) descriz); - } - else - set_header(4,"@27g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - datafine = _data_fine.string(); - - if (_annomsk == 0) - { - set_header (5, "Periodo@12g%s", (const char*) dataini); - set_header (5, "@24g%s", (const char*) datafine); - } - else - { - set_header (5, "Periodo di competenza@23g%s", (const char*) dataini); - set_header (5, "@35g%s", (const char*) datafine); - } -} - -int TMastrini_application::ricerca_gruppo(int start) -{ - TString80 descr,descriz,descriz2,dep; - TString dataini,datafine; - int r = start; - - ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto - - if (_sezivd == '0') //Non esiste a livello di sottoconto - ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto - - descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); - if (_numivd != 0) //Ora devo stampare la descrizione del livello della - { //classe immediatamente precedente a quello appena - if (_numrivd != "") //stampato - descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); - else - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - } - else - if (_numrivd != "") - descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); - else - descriz2 = ""; - - set_row(r,"@27g%-.30s",(const char*) descrizione_gruppo()); - set_row(r,"@59g%-.30s",(const char*) descrizione_conto()); - - set_row(r++,"@91g%-.41s",(const char*) descrizione_sottoconto()); - set_row(r, "@0gClasse@12g%c", _lettivd); - set_row(r, "@14g%-8s",(const char*) _numrivd); - if (_numivd != 0) - set_row(r, "@23g%d", _numivd); - if (descriz2 != "") - { - set_row(r,"@27g%-50s",(const char*) descriz2); - set_row(r++,"@80g%-50s",(const char*) descriz); - } - else - set_row(r++,"@27g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - datafine = _data_fine.string(); - - if (_annomsk == 0) - { - set_row (r, "Periodo@12g%s", (const char*) dataini); - set_row (r, "@24g%s", (const char*) datafine); - } - else - { - set_row (r, "Periodo di competenza@23g%s", (const char*) dataini); - set_row (r, "@35g%s", (const char*) datafine); - } - return r; -} - -const char* TMastrini_application::descrizione_classe(char sezione, char lettera, int numr, int numero) -{ - TTable tabivd(TAB_IVD); - TString dep,dep2; - - tabivd.zero(); - if (numr == 0 && numero == 0) - dep = format("%c%c",sezione,lettera); - else - if (numero == 0) - { - if (numr != 0) - dep = format("%1c%1c%04d",sezione, lettera, numr); - else - dep = format("%c%c ",sezione,lettera); - } - else - { - if (numr != 0) - dep = format("%1c%1c%04d%02d",sezione, lettera, numr,numero); - else - dep = format("%c%c %02d",sezione,lettera,numero); - } - - tabivd.put("CODTAB", dep); - tabivd.read(); - dep2 = tabivd.get("CODTAB"); - if (dep == dep2) - TMP = tabivd.get("S0"); - else - TMP = ""; - return TMP; -} - -//Ricerca la descrizione relativa al gruppo da stampare - -const char* TMastrini_application::descrizione_gruppo() -{ - TLocalisamfile pconti(LF_PCON); - - pconti.zero(); - pconti.put(PCN_GRUPPO,_gruppo); - if (pconti.read() != NOERR) pconti.zero(); - TMP = pconti.get(PCN_DESCR); - return TMP; -} - -// Ricerca la descrizione relativa al conto da stampare - -const char* TMastrini_application::descrizione_conto() -{ - TLocalisamfile pconti(LF_PCON); - - pconti.zero(); - pconti.put(PCN_GRUPPO,_gruppo); - pconti.put(PCN_CONTO,_conto); - if (pconti.read() != NOERR) pconti.zero(); - TMP = pconti.get(PCN_DESCR); - return TMP; -} - -const char* TMastrini_application::descrizione_sottoconto() -{ - TLocalisamfile pconti(LF_PCON); - - pconti.zero(); - pconti.put(PCN_GRUPPO, _gruppo); - pconti.put(PCN_CONTO, _conto); - pconti.put(PCN_SOTTOCONTO, _sottoc); - if (pconti.read() != NOERR) pconti.zero(); - TMP = pconti.get(PCN_DESCR); - return TMP; -} - -bool TMastrini_application::user_create() -{ - TToken_string exp; - - _rel = new TRelation (LF_SALDI); - - exp.add("GRUPPO=GRUPPO"); - exp.add("CONTO=CONTO"); - exp.add("SOTTOCONTO=SOTTOCONTO"); - _rel->add(LF_RMOV,exp,2,LF_SALDI); - - _cur1=add_cursor(new TCursor(_rel,"",2)); - - _nditte = new TLocalisamfile (LF_NDITTE); - _unloc = new TLocalisamfile (LF_UNLOC); - _comuni = new TLocalisamfile (LF_COMUNI); - _mov = new TLocalisamfile (LF_MOV); - _clifo = new TLocalisamfile (LF_CLIFO); - _caus = new TLocalisamfile (LF_CAUSALI); - _tabivd = new TTable (TAB_IVD); - _tabtpd = new TTable (TAB_TPD); - _tabreg = new TTable (TAB_REG); - _tabesc = new TTable (TAB_ESC); - _sld = new TSaldo (); - - _d18 = new TParagraph_string ("",18); - _d23 = new TParagraph_string ("",23); - _d30 = new TParagraph_string ("",30); - - _msk = new TMask("cg3200a"); - _msk->set_handler(F_SOTTOCINI_CONTO, sottoc_handler_ini); - _msk->set_handler(F_SOTTOCINI_CLIENTE, sottoc_handler_ini); - _msk->set_handler(F_SOTTOCINI_FORN, sottoc_handler_ini); - _msk->set_handler(F_SOTTOCFINE_CONTO, sottoc_handler_fine); - _msk->set_handler(F_SOTTOCFINE_CLIENTE, sottoc_handler_fine); - _msk->set_handler(F_SOTTOCFINE_FORN, sottoc_handler_fine); - - _msk->set_handler (F_GRUPPOFINE ,gruppo_hnd); - _msk->set_handler (F_CONTOINI_CONTO ,contoi_hnd); - _msk->set_handler (F_CONTOINI_CLIENTE ,contoi_hnd); - _msk->set_handler (F_CONTOINI_FORN ,contoi_hnd); - _msk->set_handler (F_CONTOFINE_CONTO ,contof_hnd); - _msk->set_handler (F_CONTOFINE_CLIENTE ,contof_hnd); - _msk->set_handler (F_CONTOFINE_FORN ,contof_hnd); - -// _msk->set_handler (F_SOTTOCFINE_CONTO ,sottoc_hnd); -// _msk->set_handler (F_SOTTOCFINE_CLIENTE ,sottoc_hnd); -// _msk->set_handler (F_SOTTOCFINE_FORN ,sottoc_hnd); - - return TRUE; -} - -bool TMastrini_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _mov; - delete _nditte; - delete _unloc; - delete _comuni; - delete _clifo; - delete _caus; - delete _tabivd; - delete _tabtpd; - delete _tabreg; - delete _tabesc; - delete _sld; - delete _d18; - delete _d23; - delete _d30; - - return TRUE; - -} - -int cg3200(int argc, char* argv[]) -{ - - TMastrini_application a; - - a.run(argc, argv, "Stampa Mastrini"); - - return 0; -} - +//Versione dei mastrini aggiornata con le modifiche del periodo 18 Apr - 27 Apr 1995 +//Le modifiche riguardano: +// - Stampa due mastrini per pagina e conseguente numerazione. +// - Stampa mastrini in continuo e relativa numerazione. + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cg3.h" +#include "cg3200.h" +#include "cglib.h" +#include "cglib03.h" + +int date2esc(const TDate& d, int* prevesc = NULL); +bool sottoc_handler_ini (TMask_field& f, KEY k); +bool sottoc_handler_fine (TMask_field& f, KEY k); + +class TMastrini_application : public TPrintapp +{ + static bool data_inizio (TMask_field& f, KEY k); + static bool data_fine (TMask_field& f, KEY k); + static bool gruppo_hnd (TMask_field& f, KEY k); + static bool contoi_hnd (TMask_field& f, KEY k); + static bool contof_hnd (TMask_field& f, KEY k); + friend bool sottoc_handler_ini (TMask_field& f, KEY k); + friend bool sottoc_handler_fine (TMask_field& f, KEY k); + + TDociva_array _b; + TRelation* _rel; + TMask* _msk; + TTable* _tabivd, * _tabtpd, * _tabreg, * _tabesc; + TLocalisamfile* _mov; + TLocalisamfile* _nditte; + TLocalisamfile* _unloc; + TLocalisamfile* _comuni; + TLocalisamfile* _clifo; + TLocalisamfile* _caus; + TSaldo* _sld; + TParagraph_string* _d18,* _d23,* _d30; + TArray _riga, _lista; + + TDate _data_ini,_data_fine,_data_finese,_data_finesesucc,_ultima_data_reg; + TDate _datareg,_datadoc,_data_inizioese,_datareg_stampa,_inizioes; + int _cur1,_gruppo,_conto,_numcarat,_stampanum,_numivd,_annoiva; + int _numrig,_natdoc,_tipo,_tipostampa,_g_prec,_c_prec,_numrivd_int; + real _progredare,_progreavere,_totprogre_dare_al,_totprogre_avere_al; + real _totprogre_dare,_totprogre_avere,_importo; + real _riporto_dare,_riporto_avere,_riporto_parziale_dare,_riporto_parziale_avere; + real _totale_periodo_dare,_totale_periodo_avere,_totale_prima_dare,_totale_prima_avere; + real _saldo_periodo,_saldo_progre,_saldo_progre_al,_saldo_progre_prec; + real _saldo_movimenti,_saldo_progressivi,_totale_saldo; + TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; + long _codice_ditta,_s_prec; + TString _tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva,_g_contr,_c_contr,_s_contr; + char _sezivd,_lettivd; + TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd,_descr; + TString _dataregs, _datadocs; + int _gruppocontr,_contocontr,_nummast,_pagina; + long _sottocontocontr; + + bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov; + + int _annomsk,_annoesmsk,_annoes,_annomsksucc,_tipo_mask,_anno_ghost; + int _anno_corrente,_anno_precedente,_indbil,_numero_pag; + long _sottoc,_numreg,_numgio,_protiva; + bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare,_cambia_mastrino; + char _tmcf,_tipo_contr; + + TDate _dataregrmov; + int _gruppof,_contof; + long _sottocf; + TString _dataregrmovstring,_importo_str,_saldo_movimenti_str,_saldo_progressivi_str; + + int _rw, _conta_mastrini, _indice_array, _item, _item_lista, _indice_lista; + int _ddociva_len; + +protected: + virtual bool user_create() ; + virtual bool user_destroy(); + virtual bool set_print(int m); + + virtual bool preprocess_print(int file, int counter); + virtual bool preprocess_page (int,int); + virtual print_action postprocess_page (int,int); + virtual print_action postprocess_print(int,int); + virtual void preprocess_header(); + virtual void set_page(int,int); + virtual void process_link(int id, const char* txt); + +public: + TDate _inizioEs,_fineEs; + void ricerca_clifo(); + void ricerca_gruppo(); + int ricerca_clifo(int riga); + int ricerca_gruppo(int riga); + + void calcola_progressivi(); + void calcola_progressivi_al(); + void stampa_progressivi(); + int stampa_progressivi(int start_riga); + void stampa_progre_riporto(); + int stampa_progre_riporto(int start_riga); + void documenti_iva(); + void ricerca_regiva(); + void descrizione_causale(); + void saldi_zero(); + int crea_intestazione(int riga); + void crea_intestazione(); + void fai_stampa132(); + void fai_stampa198(); + void stampa_totali132(); + void stampa_totali198(); + void stampa_totali132_II(); + void stampa_totali198_II(); + void carica_array_totali132(); + void carica_array_totali198(); + void stampa_totaliiva(); + void ricerca_classe_IV(bool scelta); + void data_fine_esercizio(int); + const char* descrizione_gruppo(); + const char* descrizione_conto(); + const char* descrizione_sottoconto(); + const char* descrizione_classe(char,char,int,int); + bool almeno_un_record(); + void ricerca_dati_ditta(); + void conto(int,int,bool); + bool check_ordine(TMask_field& f, KEY k); + + void setta_riga (int r, TString riga); + int righe_rimaste_da_stampare(); + + TMastrini_application() {} +}; + +HIDDEN TMastrini_application& app() { return (TMastrini_application&) main_app(); } + +int TMastrini_application::righe_rimaste_da_stampare() +{ + int righe_rimaste = 0; + + if (_nummast == 2) + { + if (printer().rows_left() != 0) + { + if ( (_conta_mastrini % 2) != 0) + { + if ( (printer().formlen() % 2) != 0) + righe_rimaste = printer().rows_left() - (printer().formlen() / 2) + 1; //- 33; + else + righe_rimaste = printer().rows_left() - (printer().formlen() / 2); + } + else + righe_rimaste = printer().rows_left(); + } + else + { + if ( (_conta_mastrini % 2) != 0) + righe_rimaste = printer().formlen() / 2; //32; + else + { + if ( (printer().formlen() % 2) != 0) + righe_rimaste = (printer().formlen() / 2) + 1; //33; + else + righe_rimaste = printer().formlen / 2; + } + } + } + + return righe_rimaste; +} + +void TMastrini_application::process_link(int id, const char* txt) +{ + const char* const app = "cg2 -0"; + TToken_string ss(10); + ss.add("1"); + ss.add(txt); + + TMessage fs(cmd2name(app), MSG_LN, ss); + fs.send(); + + TExternal_app pn(app); + pn.run(); +} + +bool sottoc_handler_ini(TMask_field& f, KEY key) +{ + const short id = f.dlg(); + TString ds; + TString80 rs; + bool warning; + TLocalisamfile pconti (LF_PCON); + int conto; + + const int gruppo = f.mask().get_int(F_GRUPPOINI); + + if (id == F_SOTTOCINI_CONTO) + conto = f.mask().get_int(F_CONTOINI_CONTO); + else + if (id == F_SOTTOCINI_CLIENTE) + conto = f.mask().get_int(F_CONTOINI_CLIENTE); + else + if (id == F_SOTTOCINI_FORN) + conto = f.mask().get_int(F_CONTOINI_FORN); + + const long sottoconto = f.mask().get_long(id); + + if ( key == K_ENTER ) + { + if (sottoconto != 0 && conto == 0) + return f.warning_box("Manca il CONTO"); + + if (conto != 0 && gruppo == 0) + return f.warning_box("Manca il GRUPPO"); + } + + if ( key == K_TAB && f.mask().is_running()) + { + if (id == F_SOTTOCINI_CONTO) + { + pconti.zero(); + pconti.put(PCN_GRUPPO, gruppo) ; + pconti.put(PCN_CONTO, conto); + pconti.put(PCN_SOTTOCONTO, sottoconto); + pconti.setkey(1); + pconti.read(_isequal, _nolock); + if (pconti.good()) + { + ds = pconti.get(PCN_DESCR); + warning = FALSE; + } + else + { + ds = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRINI_CONTO, ds); + f.mask().set(F_DESCRINI_CLIENTE, ds); + f.mask().set(F_DESCRINI_FORN, ds); + + if (warning) + return f.warning_box("Sottoconto inesistente"); + } + else + if (id == F_SOTTOCINI_CLIENTE || id == F_SOTTOCINI_FORN) + { + char tipo = id == F_SOTTOCINI_CLIENTE ? 'C' : 'F'; + TLocalisamfile clifo (LF_CLIFO); + if (sottoconto != 0) + { + clifo.zero(); + clifo.put(CLI_TIPOCF,tipo); + clifo.put(CLI_CODCF, sottoconto) ; + clifo.setkey(1); + if (clifo.read(_isequal, _nolock) == NOERR) + { + rs = clifo.get(CLI_RAGSOC); + warning = FALSE; + } + else + { + rs = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRINI_CLIENTE, rs); + f.mask().set(F_DESCRINI_FORN, rs); + + if (warning) + return f.warning_box("Anagrafica inesistente"); + } + } + } + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////// +// Inizio modifica del 02-05-95 riguardo controlli di validita' su gruppo, // +// conto e sottoconto iniziale e finale. // +///////////////////////////////////////////////////////////////////////////// + +bool sottoc_handler_fine(TMask_field& f, KEY key) +{ + const short id = f.dlg(); + int conto; + TString ds; + TString80 rs; + bool warning; + TLocalisamfile pconti (LF_PCON); + + const int gruppo = f.mask().get_int(F_GRUPPOFINE); + + if (id == F_SOTTOCFINE_CONTO) + conto = f.mask().get_int(F_CONTOFINE_CONTO); + else + if (id == F_SOTTOCFINE_CLIENTE) + conto = f.mask().get_int(F_CONTOFINE_CLIENTE); + else + if (id == F_SOTTOCFINE_FORN) + conto = f.mask().get_int(F_CONTOFINE_FORN); + + const long sottoconto = f.mask().get_long(id); + + if ( key == K_ENTER ) + { + if (sottoconto != 0 && conto == 0) + return f.warning_box("Manca il CONTO"); + + if (conto != 0 && gruppo == 0) + return f.warning_box("Manca il GRUPPO"); + + if (!app().check_ordine(f,key)) + return FALSE; + } + + if ( key == K_TAB && f.mask().is_running()) + { + if (id == F_SOTTOCFINE_CONTO) + { + pconti.zero(); + pconti.put(PCN_GRUPPO, gruppo) ; + pconti.put(PCN_CONTO, conto); + pconti.put(PCN_SOTTOCONTO, sottoconto); + pconti.setkey(1); + pconti.read(_isequal, _nolock); + if (pconti.good()) + { + ds = pconti.get(PCN_DESCR); + warning = FALSE; + } + else + { + ds = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRFINE_CONTO, ds); + f.mask().set(F_DESCRFINE_CLIENTE, ds); + f.mask().set(F_DESCRFINE_FORN, ds); + + if (warning) + return f.warning_box("Sottoconto inesistente"); + } + else + if (id == F_SOTTOCFINE_CLIENTE || id == F_SOTTOCFINE_FORN) + { + char tipo = id == F_SOTTOCFINE_CLIENTE ? 'C' : 'F'; + TLocalisamfile clifo (LF_CLIFO); + if (sottoconto != 0) + { + clifo.zero(); + clifo.put(CLI_TIPOCF,tipo); + clifo.put(CLI_CODCF, sottoconto) ; + clifo.setkey(1); + if (clifo.read(_isequal, _nolock) == NOERR) + { + rs = clifo.get(CLI_RAGSOC); + warning = FALSE; + } + else + { + rs = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRFINE_CLIENTE, rs); + f.mask().set(F_DESCRFINE_FORN, rs); + + if (warning) + return f.warning_box("Anagrafica inesistente"); + } + } + } + return TRUE; +} + +bool TMastrini_application::gruppo_hnd (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + int gruppof = f.mask().get_int(F_GRUPPOFINE); + + if (gruppof == 0) + return TRUE; + + int gruppoi = f.mask().get_int(F_GRUPPOINI); + + if (gruppoi > gruppof) + return f.error_box("Il gruppo di partenza deve essere inferiore o uguale al gruppo di arrivo"); + } + + return TRUE; +} + +bool TMastrini_application::contoi_hnd (TMask_field& f, KEY k) +{ + TLocalisamfile pconti (LF_PCON); + TString ds; + + const short id = f.dlg(); + + if (k == K_TAB && f.mask().is_running()) + { + int gruppo = f.mask().get_int(F_GRUPPOINI); + int conto = f.mask().get_int(id); + + if (gruppo != 0 && conto != 0) + { + bool warning; + + char tipomsk = f.mask().get(F_TIPOCF_INI)[0]; + + pconti.zero(); + pconti.put(PCN_GRUPPO, gruppo) ; + pconti.put(PCN_CONTO, conto); + pconti.setkey(1); + pconti.read(_isequal, _nolock); + if (pconti.good()) + { + char tipo = pconti.get_char(PCN_TMCF); + if (tipomsk != tipo) + return f.warning_box("Conto inesistente"); + + ds = pconti.get(PCN_DESCR); + warning = FALSE; + } + else + { + ds = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRINI_CLIENTE, ds); + f.mask().set(F_DESCRINI_FORN, ds); + f.mask().set(F_DESCRINI_CONTO, ds); + + if (warning) + return f.warning_box("Conto inesistente"); + } + else + { + ds = ""; + f.mask().set(F_DESCRINI_CLIENTE, ds); + f.mask().set(F_DESCRINI_FORN, ds); + f.mask().set(F_DESCRINI_CONTO, ds); + } + } + + return TRUE; +} + +bool TMastrini_application::contof_hnd (TMask_field& f, KEY k) +{ + TLocalisamfile pconti (LF_PCON); + TString ds; + const short id = f.dlg(); + + if (k == K_ENTER) + { + int gruppof = f.mask().get_int(F_GRUPPOFINE); + + if (gruppof == 0) + return TRUE; + + int gruppoi = f.mask().get_int(F_GRUPPOINI); + + if (gruppoi < gruppof) + return TRUE; + + int contof = f.mask().get_int(id); + int contoi; + + char tipo = f.mask().get(F_TIPOCF_INI)[0]; + + if (tipo == '\0') + contoi = f.mask().get_int(F_CONTOINI_CONTO); + else + if (tipo == 'C') + contoi = f.mask().get_int(F_CONTOINI_CLIENTE); + else + if (tipo == 'F') + contoi = f.mask().get_int(F_CONTOINI_FORN); + + + if (contoi > contof) + return f.error_box("Il conto di partenza deve essere inferiore o uguale al conto di arrivo"); + } + + if (k == K_TAB && f.mask().is_running()) + { + int gruppo = f.mask().get_int(F_GRUPPOFINE); + int conto = f.mask().get_int(id); + if (gruppo != 0 && conto != 0) + { + bool warning; + + char tipomsk = f.mask().get(F_TIPOCF_FINE)[0]; + + pconti.zero(); + pconti.put(PCN_GRUPPO, gruppo) ; + pconti.put(PCN_CONTO, conto); + pconti.setkey(1); + pconti.read(_isequal, _nolock); + if (pconti.good()) + { + char tipo = pconti.get_char(PCN_TMCF); + if (tipomsk != tipo) + return f.warning_box("Conto inesistente"); + + ds = pconti.get(PCN_DESCR); + warning = FALSE; + } + else + { + ds = ""; + warning = TRUE; + } + + f.mask().set(F_DESCRFINE_CLIENTE, ds); + f.mask().set(F_DESCRFINE_FORN, ds); + f.mask().set(F_DESCRFINE_CONTO, ds); + + if (warning) + return f.warning_box("Conto inesistente"); + } + else + { + ds = ""; + f.mask().set(F_DESCRFINE_CLIENTE, ds); + f.mask().set(F_DESCRFINE_FORN, ds); + f.mask().set(F_DESCRFINE_CONTO, ds); + } + + } + + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////// +// FINE MODIFICA DEL 02-05-95 // +///////////////////////////////////////////////////////////////////////////// + +bool TMastrini_application::check_ordine(TMask_field& f, KEY k) +{ + int gruppof = f.mask().get_int(F_GRUPPOFINE); + + if (gruppof == 0) + return TRUE; + + int gruppoi = f.mask().get_int(F_GRUPPOINI); + + if (gruppoi < gruppof) + return TRUE; + + int contof = f.mask().get_int(F_CONTOFINE_CONTO); + int contoi = f.mask().get_int(F_CONTOINI_CONTO); + + if (contoi < contof) + return TRUE; + + long sottocf = f.mask().get_long(F_SOTTOCFINE_CONTO); + long sottoci = f.mask().get_long(F_SOTTOCINI_CONTO); + + if (sottoci > sottocf) + return f.error_box("Il sottoconto di partenza deve essere inferiore o uguale al sottoconto di arrivo"); + + return TRUE; +} + +int date2esc(const TDate& d, int* prevesc) +{ + if (prevesc) *prevesc = 0; + TTable esc("ESC"); + for (int err = esc.first(); err == NOERR; err = esc.next()) + { + const TDate ia(esc.get("D0")); // Data inizio esercizio + const TDate fa(esc.get("D1")); // Data fine esercizio + app()._inizioEs = ia; + app()._fineEs = fa; + const anno = esc.get_int("CODTAB"); + if (d >= ia && d <= fa) + return anno; + if (prevesc) *prevesc = anno; + } + return 0; +} + +//Questa funzione restituisce vero se il record su piano dei conti ha almeno un +//record figlio (e che soddisfa la condizione riguardante la data di registr.). +//Viene successivamente utilizzata per stampare l'intestazione (e i totali) +//oppure no + +bool TMastrini_application::almeno_un_record() +{ + bool trovato=FALSE; + long record,sottoc; + int gruppo,conto; + TDate datareg, datacomp; + TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); + + if (current_cursor()->is_first_match(LF_RMOV)) + { + record = rmov.recno(); + rmov.zero(); + rmov.put(RMV_GRUPPO, _gruppo); + rmov.put(RMV_CONTO, _conto); + rmov.put(RMV_SOTTOCONTO, _sottoc); + for (rmov.read(); !rmov.eof() ;rmov.next()) + { + int annoes = rmov.get_int (RMV_ANNOES); + long numreg = rmov.get_long(RMV_NUMREG); + + _mov->setkey(1); + _mov->curr().zero(); + _mov->curr().put(MOV_NUMREG,numreg); + _mov->read(); + if (_mov->bad()) + _mov->zero(); + datacomp = (_mov->curr().get(MOV_DATACOMP)); + + if (_annomsk == 0) + datareg = rmov.get_date(RMV_DATAREG); + else + if (_annomsk != 0) + datareg = datacomp; + + gruppo = rmov.get_int(RMV_GRUPPO); + conto = rmov.get_int(RMV_CONTO); + sottoc = rmov.get_long(RMV_SOTTOCONTO); + if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) + break; + else + if (((annoes==_annomsk)||(_annomsk==0))&&((datareg>=_data_ini)&&(datareg<=_data_fine))) + { + trovato = TRUE; + break; + } + } + rmov.readat(record); + } + return trovato; +} + +bool TMastrini_application::data_inizio(TMask_field& f, KEY k) +{ + int anno; + TDate data; + + anno = f.mask().get_int(F_ANNO); + data = f.mask().get (F_DATAINI); + app()._annomsk = anno; + + if (k == K_ENTER) + { + if (anno != 0) + { + app().data_fine_esercizio(anno); + + if (data == botime) + app()._data_ini = app()._data_inizioese; + else + if (data < app()._data_inizioese || data > app()._data_finese) + { + f.error_box("La data non appartiene all'esercizio indicato"); + return FALSE; + } + else + app()._data_ini = data; + } + else + if (anno == 0) + { + if (data == botime) + { + f.error_box("La data deve essere obbligatoriamente indicata"); + return FALSE; + } + else + app()._data_ini = data; + } + } + return TRUE; +} + +bool TMastrini_application::data_fine(TMask_field& f, KEY k) +{ + int annoes; + TDate data, data_ini; + + annoes = f.mask().get_int(F_ANNO); + data = f.mask().get (F_DATAFINE); + data_ini = f.mask().get (F_DATAINI); + app()._annomsk = annoes; + + if (k == K_ENTER) + { + if (annoes != 0) + { + app().data_fine_esercizio(annoes); + + if (data == botime) + app()._data_fine = app()._data_finese; + else + if (data < app()._data_inizioese || data > app()._data_finese) + { + f.error_box("La data non appartiene all'esercizio indicato"); + return FALSE; + } + else + app()._data_fine = data; + } + else + if (annoes == 0) + { + if (data == botime) + { + f.error_box("La data deve essere obbligatoriamente indicata"); + return FALSE; + } + + app()._anno_ghost = date2esc(data_ini); + + app()._inizioes = app()._inizioEs; + + if (data < app()._inizioEs || data > app()._fineEs) + { + f.error_box("La data non appartiene all'esercizio indicato"); + return FALSE; + } + else + app()._data_fine = data; + } + + if (data < data_ini) + { + f.error_box("La data finale non puo' essere inferiore alla data di partenza"); + return FALSE; + } + + + } + return TRUE; +} + +void TMastrini_application::saldi_zero() +{ + TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); + real saldo_dare, saldo_avere; + long record; + + saldo_dare = saldo_avere = 0; + + if (current_cursor()->is_first_match(LF_RMOV)) + { + record = rmov.recno(); + + while (!rmov.eof()) + { + rmov.read(); + char sezione = rmov.curr().get(RMV_SEZIONE)[0]; + real importo = rmov.curr().get_real(RMV_IMPORTO); + int gruppo = atoi(rmov.get(RMV_GRUPPO)); + int conto = atoi(rmov.get(RMV_CONTO)); + long sottoc = atol(rmov.get(RMV_SOTTOCONTO)); + + if ((gruppo == _gruppo)&&(conto == _conto)&&(sottoc == _sottoc)) + { + if (sezione == 'D') + saldo_dare += importo; + else if (sezione == 'A') + saldo_avere += importo; + } + else break; + rmov.next(); + } + rmov.readat(record); + } + _totale_saldo = saldo_dare - saldo_avere; +} + +void TMastrini_application::fai_stampa132() +{ + if (_nummast == 1 || _nummast == 3) + _rw = 1; + else + if (_nummast == 2) + { + int riga; + + if ( (_conta_mastrini % 2) != 0 ) + riga = (printer().formlen() / 2); //-1 + else + riga = printer().formlen(); //-1; + + int app1 = printer().formlen(); + int app2 = printer().rows_left(); + int cur_row = (app1 - app2); + + if (cur_row == riga) + { + //_rw += 2; + _rw = crea_intestazione(_rw); + _rw = stampa_progre_riporto(_rw); + + for (int i = _indice_array; i < _item; i++) + { + TString& data = (TString&)_riga[i]; + + int g1 = data.find("g",1); + int c1 = data.find("@",g1); + int g2 = data.find("g",c1); + + TString fmt1 = ""; + TString fmt2 = ""; + TString str1,str2; + + if (g1 != -1) + { + fmt1 = data.sub(0,g1+1); + fmt1 << "%s"; + str1 = data.sub(g1+1,c1); + } + if (c1 != -1) + { + fmt2 = data.sub(c1,g2+1); + fmt2 << "%s"; + str2 = data.sub(g2+1); + } + + if (fmt1 != "") + set_row (_rw,fmt1,(const char*) str1); + if (fmt2 != "") + set_row (_rw,fmt2,(const char*) str2); + + _rw++; + } + } + else + _rw = 1; + + _riga.destroy(); + } + + set_row (_rw,"@0g#t", &_dataregs); + if (_stampanum == 1) + set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); + else + if (_stampanum == 2) + { + set_row (_rw,"@11g#7d", &_numgio); + } + + set_row (_rw,"@19g#t", &_datadocs); + set_row (_rw,"@30g#7t", &_numdoc); + set_row (_rw,"@38g#3t", &_codcaus); + + set_row (_rw,"@117g#3t", &_g_contr); + set_row (_rw,"@120g#3t", &_c_contr); + set_row (_rw,"@123g#6t", &_s_contr); +} + +void TMastrini_application::fai_stampa198() +{ + if (_nummast == 1 || _nummast == 3) + _rw = 1; + else + if (_nummast == 2) + { + int riga; + + if ( (_conta_mastrini % 2) != 0 ) + riga = (printer().formlen() / 2); //-1 + else + riga = printer().formlen(); //-1; + + int app1 = printer().formlen(); + int app2 = printer().rows_left(); + int cur_row = (app1 - app2); + + if (cur_row == riga) + { + //_rw += 2; + _rw = crea_intestazione(_rw); + _rw = stampa_progre_riporto(_rw); + + for (int i = _indice_array; i < _item; i++) + { + TString& data = (TString&)_riga[i]; + + int g1 = data.find("g",1); + int c1 = data.find("@",g1); + int g2 = data.find("g",c1); + + TString fmt1 = ""; + TString fmt2 = ""; + TString str1,str2; + + if (g1 != -1) + { + fmt1 = data.sub(0,g1+1); + fmt1 << "%s"; + str1 = data.sub(g1+1,c1); + } + if (c1 != -1) + { + fmt2 = data.sub(c1,g2+1); + fmt2 << "%s"; + str2 = data.sub(g2+1); + } + + if (fmt1 != "") + set_row (_rw,fmt1,(const char*) str1); + if (fmt2 != "") + set_row (_rw,fmt2,(const char*) str2); + + _rw++; + } + } + else + _rw = 1; + + _riga.destroy(); + } + + set_row (_rw,"@0g#t", &_dataregs); + if (_stampanum == 1) + { + set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); + set_row (_rw,"@18g/#3d", &_numrig); + } + else if (_stampanum == 2) + set_row (_rw,"@11g#7d", &_numgio); + + set_row (_rw,"@23g#t", &_datadocs); + set_row (_rw,"@34g#7t", &_numdoc); + set_row (_rw,"@42g#3t", &_codcaus); + +// Stampa saldo movimenti + + set_row (_rw,"@149g#t", &_saldo_movimenti_str); + + set_row (_rw,"@165g#3t", &_g_contr); + set_row (_rw,"@169g#3t", &_c_contr); + set_row (_rw,"@173g#6t", &_s_contr); +} + +void TMastrini_application::stampa_totali132() +{ + TString sep(132); + + if (_nummast == 1 || _nummast == 3) + _rw = 2; + + sep.fill('-'); //Stampa 132 - (sep(132)) + set_row(_rw++,"@0g%s", (const char *) sep); + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; + _saldo_progre = _totprogre_dare - _totprogre_avere; + _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; + TString string = _saldo_periodo.string("###.###.###.###"); + set_row (_rw,"@32gTOTALI PERIODO@69g%15s", (const char*)string); + string = _totale_periodo_dare.string("###.###.###.###"); + set_row (_rw,"@85g%15s", (const char*)string); + string = _totale_periodo_avere.string("###.###.###.###"); + set_row (_rw++,"@101g%15s", (const char*)string); + string = _saldo_progre.string("###.###.###.###"); + set_row (_rw,"@32gTOTALI PROGRESSIVI@69g%15s", (const char*)string); + string = _totprogre_dare.string("###.###.###.###"); + set_row (_rw,"@85g%15s", (const char*)string); + string = _totprogre_avere.string("###.###.###.###"); + set_row (_rw++,"@101g%15s", (const char*)string); + if (_stampaprogre) //Progressivi attuali + { + TString str = _saldo_progre_al.string("###.###.###.###"); + set_row (_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); + set_row (_rw,"@69g%15s", (const char*)str); + str = _totprogre_dare_al.string("###.###.###.###"); + set_row (_rw,"@85g%15s", (const char*)str); + str = _totprogre_avere_al.string("###.###.###.###"); + set_row (_rw,"@101g%15s", (const char*)str); + } +} + +void TMastrini_application::carica_array_totali132() +{ + TString sep(132); + TToken_string r(255); + + if (_nummast == 2) + _rw = 1; + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; + _saldo_progre = _totprogre_dare - _totprogre_avere; + _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; + + sep.fill(' '); + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + sep.fill('-'); //Stampa 132 - (sep(132)) + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + r.add("@32gTOTALI PERIODO@69g%15s@85g%15s@101g%15s"); + r.add(_saldo_periodo.string("###.###.###.###")); + r.add(_totale_periodo_dare.string("###.###.###.###")); + r.add(_totale_periodo_avere.string("###.###.###.###")); + _lista.add(r); + r = ""; + + r.add("@32gTOTALI PROGRESSIVI@69g%15s@85g%15s@101g%15s"); + r.add(_saldo_progre.string("###.###.###.###")); + r.add(_totprogre_dare.string("###.###.###.###")); + r.add(_totprogre_avere.string("###.###.###.###")); + _lista.add(r); + r = ""; + + if (_stampaprogre) //Progressivi attuali + { + r.add("@32gTOTALI PROGRESSIVI AL@55g%s@69g%15s@85g%15s@101g%15s"); + r.add(_ultima_data_reg.string()); + r.add(_saldo_progre_al.string("###.###.###.###")); + r.add(_totprogre_dare_al.string("###.###.###.###")); + r.add(_totprogre_avere_al.string("###.###.###.###")); + _lista.add(r); + r = ""; + } + + if (_stampatotiva) + { + real totale; + + sep.fill(' '); + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + TString fmt ("@0g%s"); + TString fmt1(format("@%dg", _ddociva_len)); + fmt << fmt1 << "%15s"; + + for (int j = 0; j < _b.items(); j++) + { + TDociva& riga = (TDociva&)_b[j]; + r.add(fmt); + r.add(riga._descrdoc); + totale = riga._totdociva; + r.add(totale.string("###.###.###.###")); + _lista.add(r); + r = ""; + } + + _b.destroy(); + } + + _indice_lista = 0; +} + +void TMastrini_application::stampa_totali132_II() +{ + int riga,cur_row,diff; + int lim = 0; + + _item_lista = _lista.items(); + + if ( (_conta_mastrini % 2) != 0 ) + { + riga = (printer().formlen() / 2); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + else + { + riga = printer().formlen(); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + + if (_indice_lista == 0 && diff != 0) + { + if (_item_lista > diff) + lim = diff; + else + lim = _item_lista; + } + else + { + lim = _item_lista; + _rw = 1; + _rw = crea_intestazione(_rw); + _rw = stampa_progre_riporto(_rw); + if ( (_conta_mastrini % 2) != 0 ) + { + riga = (printer().formlen() / 2); //- 1; + cur_row = _rw; + diff = riga - cur_row; + } + else + { + riga = printer().formlen(); //- 1; + cur_row = _rw + (printer().formlen() / 2); //32; + diff = riga - cur_row; + } + } + + for (int i = _indice_lista; i < lim; i++) + { + TToken_string& data = (TToken_string&)_lista[i]; + + TString fmt (data.get(0)); + TString arg1 (data.get(1)); + TString arg2 (data.get(2)); + TString arg3 (data.get(3)); + TString arg4 (data.get(4)); + + set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); + + _indice_lista++; + } + + if (_item_lista <= diff) + _lista.destroy(); +} + +void TMastrini_application::stampa_totali198() +{ + TString sep(198); + + if (_nummast == 1 || _nummast == 3) + _rw = 1; + + sep.fill('-'); //Stampa 198 - (sep(198)) + set_row(_rw++,"@0g%s", (const char *) sep); + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + TString string = _totale_periodo_dare.string("###.###.###.###"); + set_row (_rw,"@32gTOTALI PERIODO@101g%15s", (const char*)string); + string = _totale_periodo_avere.string("###.###.###.###"); + set_row (_rw,"@117g%15s", (const char*)string); + string = _saldo_movimenti.string("###.###.###.###"); + set_row (_rw++,"@149g%15s", (const char*)string); + string = _totprogre_dare.string("###.###.###.###"); + set_row (_rw,"@32gTOTALI PROGRESSIVI@101g%15s",(const char*)string); + string = _totprogre_avere.string("###.###.###.###"); + set_row (_rw,"@117g%15s", (const char*)string); + string = _saldo_progressivi.string("###.###.###.###"); + set_row (_rw++,"@133g%15s", (const char*)string); + if (_stampaprogre) //Progressivi attuali + { + set_row(_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); + TString str = _totprogre_dare_al.string("###.###.###.###"); + set_row (_rw,"@101g%15s", (const char*)str); + str = _totprogre_avere_al.string("###.###.###.###"); + set_row (_rw,"@117g%15s", (const char*)str); + str = _saldo_progressivi.string("###.###.###.###"); + set_row (_rw,"@133g%15s", (const char*)str); + } +} + +void TMastrini_application::carica_array_totali198() +{ + TString sep(198); + TToken_string r(255); + + if (_nummast == 2) + _rw = 1; + + sep.fill(' '); //Stampa 132 - (sep(132)) + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + sep.fill('-'); //Stampa 132 - (sep(132)) + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + + r.add("@32gTOTALI PERIODO@101g%15s@117g%15s@149g%15s"); + r.add(_totale_periodo_dare.string("###.###.###.###")); + r.add(_totale_periodo_avere.string("###.###.###.###")); + r.add(_saldo_movimenti.string("###.###.###.###")); + _lista.add(r); + r = ""; + + r.add("@32gTOTALI PROGRESSIVI@101g%15s@117g%15s@133g%15s"); + r.add(_totprogre_dare.string("###.###.###.###")); + r.add(_totprogre_avere.string("###.###.###.###")); + r.add(_saldo_progressivi.string("###.###.###.###")); + _lista.add(r); + r = ""; + + if (_stampaprogre) //Progressivi attuali + { + r.add("@32gTOTALI PROGRESSIVI AL@55g%s@101g%15s@117g%15s@133g%15s"); + r.add(_ultima_data_reg.string()); + r.add(_totprogre_dare_al.string("###.###.###.###")); + r.add(_totprogre_avere_al.string("###.###.###.###")); + r.add(_saldo_progressivi.string("###.###.###.###")); + _lista.add(r); + r = ""; + } + + if (_stampatotiva) + { + real totale; + + sep.fill(' '); + r.add("@0g%s"); + r.add(sep); + _lista.add(r); + r = ""; + + TString fmt ("@0g%s"); + TString fmt1(format("@%dg", _ddociva_len)); + fmt << fmt1 << "%15s"; + + for (int j = 0; j < _b.items(); j++) + { + TDociva& riga = (TDociva&)_b[j]; + r.add(fmt); + r.add(riga._descrdoc); + totale = riga._totdociva; + r.add(totale.string("###.###.###.###")); + _lista.add(r); + r = ""; + } + + _b.destroy(); + } + + _indice_lista = 0; +} + +void TMastrini_application::stampa_totali198_II() +{ + int riga,cur_row,diff; + int lim = 0; + + _item_lista = _lista.items(); + + if ( (_conta_mastrini % 2) != 0 ) + { + riga = (printer().formlen() / 2); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + else + { + riga = printer().formlen(); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + + if (_indice_lista == 0 && diff != 0) + { + if (_item_lista > diff) + lim = diff; + else + lim = _item_lista; + } + else + { + lim = _item_lista; + _rw = 1; + _rw = crea_intestazione(_rw); + _rw = stampa_progre_riporto(_rw); + if ( (_conta_mastrini % 2) != 0 ) + { + riga = (printer().formlen() / 2); //- 1; + cur_row = _rw; + diff = riga - cur_row; + } + else + { + riga = printer().formlen(); //- 1; + cur_row = _rw + (printer().formlen() / 2); //32; + diff = riga - cur_row; + } + } + + for (int i = _indice_lista; i < lim; i++) + { + TToken_string& data = (TToken_string&)_lista[i]; + + TString fmt (data.get(0)); + TString arg1 (data.get(1)); + TString arg2 (data.get(2)); + TString arg3 (data.get(3)); + TString arg4 (data.get(4)); + + set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); + + _indice_lista++; + } + + if (_item_lista <= diff) + _lista.destroy(); +} + +void TMastrini_application::setta_riga (int r, TString riga) +{ + TString *p = (TString*)_riga.objptr(r); + if (!p) + { + p = new TString; + _riga.add (p); + } + *p << riga; +} + +bool TMastrini_application::preprocess_page(int file, int counter) +{ + TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); + long rec; + TDate datasucc; + TString datasuccstring,dataregrmovstring; + int gruppof,contof; + long sottocf; + TString provvis = ""; + int annoes; + + if (counter) + return TRUE; + + switch (file) + { + case LF_SALDI: + +// Usati in crea_intestazione() + + if (_nummast == 3 || _nummast == 2) + { + _rw = 0; + _rw++; + } + + _gruppo = atoi(current_cursor()->curr(LF_SALDI).get(SLD_GRUPPO)); + _conto = atoi(current_cursor()->curr(LF_SALDI).get(SLD_CONTO)); + _sottoc = atol(current_cursor()->curr(LF_SALDI).get(SLD_SOTTOCONTO)); + + _cambia_mastrino = TRUE; + + annoes = atoi(current_cursor()->curr(LF_SALDI).get(SLD_ANNOES)); + conto(_gruppo,_conto,TRUE); + + if (annoes != _anno_corrente && annoes != _anno_precedente) + return FALSE; + + if (_g_prec == _gruppo && _c_prec == _conto && _s_prec == _sottoc) + return FALSE; + + _g_prec = _gruppo; + _c_prec = _conto; + _s_prec = _sottoc; + + _saldo_periodo = ZERO; + _totale_periodo_dare = ZERO; + _totale_periodo_avere = ZERO; + _saldo_progre = ZERO; + _totprogre_dare = ZERO; + _totprogre_avere = ZERO; + _saldo_progre_al = ZERO; + _totprogre_dare_al = ZERO; + _totprogre_avere_al = ZERO; + _progredare = ZERO; + _progreavere = ZERO; + _totale_prima_dare = ZERO; + _totale_prima_avere = ZERO; + _saldo_movimenti = ZERO; + _saldo_progressivi = ZERO; + _saldo_progre_prec = ZERO; + if (_tipostampa == 2) + saldi_zero(); + else + _totale_saldo = 1; + + if ((_tipostampa == 1) || (_tipostampa == 2)) + { + if ((almeno_un_record()) && (_totale_saldo != 0)) + { + _puoi_stampare = TRUE; + + if (_nummast == 3 || _nummast == 2) + { + _rw = crea_intestazione(_rw); + calcola_progressivi(); + _saldo_progressivi += _saldo_progre_prec; + _rw = stampa_progre_riporto(_rw); + } + } + else + { + _puoi_stampare = FALSE; + return FALSE; + } + } + else + if (_tipostampa == 3) + { + if (_nummast == 2 || _nummast == 3) + calcola_progressivi(); + if (_progredare == ZERO && _progreavere == ZERO && !almeno_un_record()) + { + _puoi_stampare = FALSE; + return FALSE; + } + else + { + _puoi_stampare = TRUE; + + if (_nummast == 3 || _nummast == 2) + { + _rw = crea_intestazione(_rw); + _saldo_progressivi += _saldo_progre_prec; + _rw = stampa_progre_riporto(_rw); + } + } + } + break; + + case LF_RMOV: + { + if (_nummast == 1 || _nummast == 3) + _rw = 1; + + // Ricerca la contropartita di quel movimento + + TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); + + _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); + _numrig = atoi (current_cursor()->curr(LF_RMOV).get(RMV_NUMRIG)); + + _gruppocontr = rmov.get_int (RMV_GRUPPOC); + _contocontr = rmov.get_int (RMV_CONTOC); + _sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC); + _g_contr = rmov.get(RMV_GRUPPOC); + _c_contr = rmov.get(RMV_CONTOC); + _s_contr = rmov.get(RMV_SOTTOCONTOC); + + // Stampa solo quelli che hanno anno esercizio uguale a quello specificato + // nella maschera. Se non viene specificato li stampa tutti + + _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); + _importo_str = _importo.string("###.###.###.###"); + _mov->setkey(1); + _mov->curr().zero(); + _mov->curr().put(MOV_NUMREG,_numreg); + _mov->read(); + if (_mov->bad()) + _mov->zero(); + _annoes = _mov->get_int(MOV_ANNOES); + _regiva = _mov->curr().get(MOV_REG); + _annoiva = _mov->curr().get_int(MOV_ANNOIVA); + + // Controlla se saldo e' diverso da 0 + + if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) + { + _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); + + if (_annomsk == 0) + { + _datareg = (_mov->curr().get(MOV_DATAREG)); + _datareg_stampa = _datareg; + } + else + if (_annomsk != 0) + { + _datareg = _mov->curr().get(MOV_DATACOMP); + _datareg_stampa = _mov->curr().get(MOV_DATAREG); + } + + provvis = _mov->curr().get(MOV_PROVVIS); + + _dataregs = _datareg_stampa.string(); + + if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) + { + if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) + { + // Determino l' anno di competenza dell' operazione in esame + + int anno = date2esc(_datareg_stampa); + if (anno != _annoes) + if (_numcarat == 1) + set_row (_rw, "@131g*"); + else + if (_numcarat == 2) + set_row (_rw, "@197g*"); + + if (_stampa_mov_prov && provvis.trim().not_empty()) + if (_numcarat == 1) + set_row(_rw, "@129gP"); + else + if (_numcarat == 2) + set_row(_rw, "@195gP"); + + _codcaus = _mov->curr().get(MOV_CODCAUS); + _tipodoc = _mov->curr().get(MOV_TIPODOC); + if (_stampatotiva && (_tmcf == 'C' || _tmcf == 'F')) + { + if (_tipodoc != "") + { + documenti_iva(); + _b.add_riga(_descrdociva,_importo, _natdoc); + if (_descrdociva.len() > _ddociva_len) + _ddociva_len = _descrdociva.len(); + } + } + _datadoc = (_mov->curr().get(MOV_DATADOC)); + _datadocs = _datadoc.string(); + _numdoc = _mov->curr().get(MOV_NUMDOC); + descrizione_causale(); + _descrizionemov = _mov->curr().get(MOV_DESCR); + _numgio = atol(_mov->curr().get(MOV_NUMGIO)); + + _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); + + if (_nummast == 1 || _nummast == 3) + { + if (_numcarat == 1) // Stampa 132 caratteri + { + if (_descrizione != "") + { + *_d23 = (const char*) _descrizione; + if (_descrizionemov != "") + { + *_d18 = (const char*) _descrizionemov; + set_row(_rw, "@42g#a", _d18); + set_row(_rw, "@61g#a", _d23); + } + else if (_descrizionemov == "") + { + *_d18 = (const char*) _descrcaus; + set_row(_rw, "@42g#a", _d18); + set_row(_rw, "@61g#a", _d23); + } + } + else if (_descrizione == "") + if (_descrizionemov != "") + { + *_d23 = (const char*) _descrizionemov; + *_d18 = (const char*) _descrcaus; + set_row (_rw,"@42g#a", _d18); + set_row (_rw,"@61g#a", _d23); + } + else + if (_descrizionemov == "") + { + conto(_gruppocontr,_contocontr,FALSE); + TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + TString80 descr_contr = tc.descrizione(); + //set_row (1,"@42g%.18s", (const char*) _descrcaus); + //if (descr_contr != "Sconosciuto") + // set_row (1,"@61g%.23s", (const char*) descr_contr); + *_d18 = (const char*) _descrcaus; + set_row (_rw,"@42g#a", _d18); + if (descr_contr != "Sconosciuto") + { + *_d23 = (const char*) descr_contr; + set_row (_rw,"@61g#a", _d23); + } + } + } + else + if (_numcarat == 2) // Stampa 198 caratteri + { + if (_descrizione != "") + { + *_d30 = (const char*) _descrizione; + if (_descrizionemov != "") + { + *_d23 = (const char*) _descrizionemov; + set_row (_rw,"@46g#a", _d23); + set_row (_rw,"@70g#a", _d30); + } + else if (_descrizionemov == "") + { + //set_row (1,"@46g%.23s", (const char*) _descrcaus); + //set_row (1,"@70g%.30s", (const char*) _descrizione); + *_d23 = (const char*) _descrcaus; + set_row(_rw, "@46g#a", _d23); + set_row(_rw, "@70g#a", _d30); + } + } + else if (_descrizione == "") + if (_descrizionemov != "") + { + //set_row (1,"@46g%.23s", (const char*) _descrcaus); + //set_row (1,"@70g%.30s", (const char*) _descrizionemov); + *_d30 = (const char*) _descrizionemov; + *_d23 = (const char*) _descrcaus; + set_row (_rw,"@46g#a", _d23); + set_row (_rw,"@70g#a", _d30); + } + else + if (_descrizionemov == "") + { + conto(_gruppocontr,_contocontr,FALSE); + TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + TString descr_contr = tc.descrizione(); + //set_row (1,"@46g%.23s", (const char*) _descrcaus); + //if (descr_contr != "Sconosciuto") + // set_row (1,"@70g%.30s", (const char*) descr_contr); + *_d23 = (const char*) _descrcaus; + set_row (_rw,"@46g#a", _d23); + if (descr_contr != "Sconosciuto") + { + *_d30 = (const char*) descr_contr; + set_row (_rw,"@70g#a", _d30); + } + } + } + } //if (_nummast == 1 || _nummast == 3) + + if (_nummast == 2) + { + TString d18,d23,d30; + + if (_numcarat == 1) // Stampa 132 caratteri + { + if (_descrizione != "") + { + d23 = _descrizione; + if (_descrizionemov != "") + d18 = _descrizionemov; + else if (_descrizionemov == "") + d18 = _descrcaus; + } + else if (_descrizione == "") + if (_descrizionemov != "") + { + d23 = _descrizionemov; + d18 = _descrcaus; + } + else + if (_descrizionemov == "") + { + conto(_gruppocontr,_contocontr,FALSE); + TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + TString80 descr_contr = tc.descrizione(); + d18 = _descrcaus; + if (descr_contr != "Sconosciuto") + d23 = descr_contr; + } + + TParagraph_string d_18 (d18,18); + int i = 0; + const char* str; + while ( (str = d_18.get()) != NULL) + { + TString stringa = ""; + stringa << "@42g" << str; + setta_riga(i,stringa); + i++; + } + + TParagraph_string d_23 (d23,23); + i = 0; + while ( (str = d_23.get()) != NULL) + { + TString stringa = ""; + stringa << "@61g" << str; + setta_riga(i,stringa); + i++; + } + } + else + if (_numcarat == 2) // Stampa 198 caratteri + { + if (_descrizione != "") + { + d30 = _descrizione; + if (_descrizionemov != "") + d23 = _descrizionemov; + else if (_descrizionemov == "") + d23 = _descrcaus; + } + else if (_descrizione == "") + if (_descrizionemov != "") + { + d30 = _descrizionemov; + d23 = _descrcaus; + } + else + if (_descrizionemov == "") + { + conto(_gruppocontr,_contocontr,FALSE); + TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + TString descr_contr = tc.descrizione(); + d23 = _descrcaus; + if (descr_contr != "Sconosciuto") + d30 = descr_contr; + } + + TParagraph_string d_23 (d23,23); + int i = 0; + const char* str; + while ( (str = d_23.get()) != NULL) + { + TString stringa = ""; + stringa << "@46g" << str; + setta_riga(i,stringa); + i++; + } + + TParagraph_string d_30 (d30,30); + i = 0; + while ( (str = d_30.get()) != NULL) + { + TString stringa = ""; + stringa << "@70g" << str; + setta_riga(i,stringa); + i++; + } + } + + _item = _riga.items(); + int riga,cur_row,diff; + + if ( (_conta_mastrini % 2) != 0 ) + { + riga = (printer().formlen() / 2); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + else + { + riga = printer().formlen(); //- 1; + cur_row = printer().formlen() - printer().rows_left(); + diff = riga - cur_row; + } + + int lim = 0; + if (_item > diff) + lim = diff; + else + lim = _item; + + _indice_array = 0; + + int k = _rw; + + for (int i = 0; i < lim; i++) + { + TString& data = (TString&)_riga[i]; + + int g1 = data.find("g",1); + int c1 = data.find("@",g1); + int g2 = data.find("g",c1); + + TString fmt1 = ""; + TString fmt2 = ""; + TString str1,str2; + + if (g1 != -1) + { + fmt1 = data.sub(0,g1+1); + fmt1 << "%s"; + str1 = data.sub(g1+1,c1); + } + if (c1 != -1) + { + fmt2 = data.sub(c1,g2+1); + fmt2 << "%s"; + str2 = data.sub(g2+1); + } + + if (fmt1 != "") + set_row (k,fmt1,(const char*) str1); + if (fmt2 != "") + set_row (k,fmt2,(const char*) str2); + + k++; + _indice_array++; + } + + //_riga.destroy(); + } //if (_nummast == 2) + + if (_sezione == "D") + { + _totale_periodo_dare += _importo; + _riporto_parziale_dare += _importo; + + if (_numcarat == 1) // Stampa 132 caratteri + set_row (_rw,"@85g%s", (const char*) _importo_str); + else + if (_numcarat == 2) // Stampa 198 caratteri + { + _saldo_progressivi += _importo; + _saldo_movimenti += _importo; + set_row (_rw,"@101g%s", (const char*) _importo_str); + } + } + else if (_sezione == "A") + { + _totale_periodo_avere += _importo; + _riporto_parziale_avere += _importo; + + if (_numcarat == 1) // Stampa 132 caratteri + set_row (_rw,"@101g%s", (const char*) _importo_str); + else + if (_numcarat == 2) // Stampa 198 caratteri + { + _saldo_progressivi -= _importo; + _saldo_movimenti -= _importo; + set_row (_rw,"@117g%s", (const char*) _importo_str); + } + } + + _saldo_progressivi_str=_saldo_progressivi.string("###.###.###.###"); + _saldo_movimenti_str=_saldo_movimenti.string("###.###.###.###"); + if (_numcarat == 2) + { + ricerca_regiva(); + _protiva = atol(_mov->curr().get(MOV_PROTIVA)); + if (_protiva != 0) + set_row (_rw,"@189g%5d", _protiva); + + if (_tipo < 3) + set_row (_rw,"@180g#t" , &_regiva); + _dataregrmov = current_cursor()->curr(LF_RMOV).get_date(RMV_DATAREG); + dataregrmovstring=_dataregrmov.string(); + +//Gestire la stampa di saldo_progressivi nella postprocess_page di RMOV + + rec = rmov.recno(); + rmov.next(); + gruppof = rmov.get_int(RMV_GRUPPO); + contof = rmov.get_int(RMV_CONTO); + sottocf = rmov.get_int(RMV_SOTTOCONTO); + datasucc = rmov.get_date(RMV_DATAREG); + datasuccstring=datasucc.string(); + if (((gruppof!=_gruppo)||(contof!=_conto)||(sottocf!=_sottoc))||(rmov.eof())) + datasucc = (""); + if (datasucc != _dataregrmov) + set_row (_rw,"@133g#t", &_saldo_progressivi_str); + rmov.readat(rec); + } + _rw = 1; + + return TRUE; + } + else + return FALSE; + } + else + return FALSE; + } + else + return FALSE; + break; + } + default: + break; + } + return TRUE; +} + +void TMastrini_application::set_page(int file, int counter) +{ + switch (file) + { + case LF_SALDI: + reset_print(); + break; + + case LF_RMOV: + reset_print(); + if (_numcarat == 1) + fai_stampa132(); + else if (_numcarat == 2) + fai_stampa198(); + break; + default: + break; + } +} + +print_action TMastrini_application::postprocess_page(int file, int counter) +{ + if (_nummast == 1 || _nummast == 3) + { + if (counter) + { + if (_nummast == 1) //Il salto pagina a rottura di mastrino viene + printer().formfeed(); //fatto solo quando seleziono un mastrino per pagina + + reset_print(); // per evitare che stampi di nuovo il totale prec. + _stampa_progressivi_si = TRUE; + _riporto_dare = ZERO; + _riporto_avere = ZERO; + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + _ddociva_len = 0; + + return NEXT_PAGE; + } + } + else + if (_nummast == 2) + { + int item_lista = _lista.items(); + + if (counter && item_lista == 0) + { + reset_print(); // per evitare che stampi di nuovo il totale prec. + _stampa_progressivi_si = TRUE; + _riporto_dare = ZERO; + _riporto_avere = ZERO; + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + _ddociva_len = 0; + + return NEXT_PAGE; + } + } + + switch (file) + { + case LF_SALDI: + { + if (_nummast == 1 || _nummast == 3) + { + if (_tipostampa == 3) + { + reset_print(); + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 2) + { + reset_print(); + if ((_totale_saldo != 0) && (_puoi_stampare)) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 1) + { + reset_print(); + if (_puoi_stampare) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + } + else + if (_nummast == 2) + { + if (!counter) + { + if (_numcarat == 1) + carica_array_totali132(); + else + if (_numcarat == 2) + carica_array_totali198(); + } + + if (_tipostampa == 3) + { + reset_print(); + if (_numcarat == 1) + stampa_totali132_II(); + else if (_numcarat == 2) + stampa_totali198_II(); + } + else if (_tipostampa == 2) + { + reset_print(); + if ((_totale_saldo != 0) && (_puoi_stampare)) + if (_numcarat == 1) + stampa_totali132_II(); + else if (_numcarat == 2) + stampa_totali198_II(); + } + else if (_tipostampa == 1) + { + reset_print(); + if (_puoi_stampare) + if (_numcarat == 1) + stampa_totali132_II(); + else if (_numcarat == 2) + stampa_totali198_II(); + } + + int item_lista = _lista.items(); + + if (item_lista == 0) + { + int righe_rimaste = righe_rimaste_da_stampare(); + + righe_rimaste = righe_rimaste - _rw; //_rw sono le righe dei totali gia' settate, mentre + //righe rimaste conteneva le righe senza quelle dei totali gia' settate + if (righe_rimaste > 0) + { + _rw++; //incremento la riga altrimenti copro l'ultimo totale settato con una riga bianca + + TString sep = " "; + + for (int i = 0; i < righe_rimaste; i++) + set_row(_rw++,"@0g%s", (const char*) sep); + } + } + } + +// _stampa_progressivi_si = TRUE; + _prima_volta = TRUE; + return REPEAT_PAGE; + } + case LF_RMOV: + force_setpage(); + break; + default: + break; + } + return NEXT_PAGE; +} + +print_action TMastrini_application::postprocess_print(int file, int counter) +{ + if (file == LF_SALDI) + { + _msk->reset(F_TIPOCF_INI); + + _msk->reset(F_GRUPPOINI); + + _msk->reset(F_CONTOINI_CONTO); + _msk->reset(F_CONTOINI_CLIENTE); + _msk->reset(F_CONTOINI_FORN); + + _msk->reset(F_SOTTOCINI_CONTO); + _msk->reset(F_SOTTOCINI_CLIENTE); + _msk->reset(F_SOTTOCINI_FORN); + + _msk->reset(F_DESCRINI_CONTO); + _msk->reset(F_DESCRINI_CLIENTE); + _msk->reset(F_DESCRINI_FORN); + + _msk->reset(F_TIPOCF_FINE); + + _msk->reset(F_GRUPPOFINE); + + _msk->reset(F_CONTOFINE_CONTO); + _msk->reset(F_CONTOFINE_CLIENTE); + _msk->reset(F_CONTOFINE_FORN); + + _msk->reset(F_SOTTOCFINE_CONTO); + _msk->reset(F_SOTTOCFINE_CLIENTE); + _msk->reset(F_SOTTOCFINE_FORN); + + _msk->reset(F_DESCRFINE_CONTO); + _msk->reset(F_DESCRFINE_CLIENTE); + _msk->reset(F_DESCRFINE_FORN); + } + return NEXT_PAGE; +} +// Stampa dei totali documenti iva se richiesta + +void TMastrini_application::stampa_totaliiva() +{ + real totale; + + if (_nummast == 1 || _nummast == 3) + { + _rw = 7; + _ddociva_len++; + TString fmt (format("@%dg", _ddociva_len)); + fmt << "%15s"; + + if (_stampatotiva) + for (int j = 0; j < _b.items(); j++) + { + TDociva& riga = (TDociva&)_b[j]; + set_row(_rw+j, "@0g%s",(const char*) riga._descrdoc); + totale = riga._totdociva; + TString string = totale.string("###.###.###.###"); + set_row(_rw+j, fmt, (const char*)string); + } + + _b.destroy(); + } +} + +// Ricerca della descrizione relativa al codice causale di MOV.dta +// sull'archivio CAUS.dta + +void TMastrini_application::descrizione_causale() +{ + _caus->setkey(1); + _caus->curr().zero(); + _caus->curr().put(CAU_CODCAUS, _codcaus); + _caus->read(); + if (_caus->bad()) + _caus->zero(); + _descrcaus = _caus->curr().get(CAU_DESCR); +} + +// Ricerca sulla tabella dei tipi documento, la descrizione e la natura del +// documento, accedendovi tramite il tipo documento trovato su MOV.dta + +void TMastrini_application::documenti_iva() +{ + TString dep; + + _tabtpd->curr().zero(); + dep << format ("%2s",(const char*) _tipodoc); + _tabtpd->curr().put("CODTAB", (const char*) dep); + _tabtpd->read(); + _descrdociva = _tabtpd->curr().get("S0"); + _natdoc = atoi(_tabtpd->curr().get("I0")); +} + +void TMastrini_application::ricerca_regiva() +{ + TString16 dep; + + _tabreg->curr().zero(); + dep << format("%04d", _annoiva); + dep << format("%3s" , (const char*) _regiva); + _tabreg->curr().put("CODTAB", (const char*) dep); + _tabreg->read(); + _tipo = _tabreg->get_int("I0"); +} + +bool TMastrini_application::preprocess_print(int file, int counter) +{ + if (file == LF_SALDI) + { + _g_prec = 0; + _c_prec = 0; + _s_prec = 0; + + _saldo_periodo = ZERO; + _totale_periodo_dare = ZERO; + _totale_periodo_avere = ZERO; + _saldo_progre = ZERO; + _totprogre_dare = ZERO; + _totprogre_avere = ZERO; + _saldo_progre_al = ZERO; + _totprogre_dare_al = ZERO; + _totprogre_avere_al = ZERO; + _progredare = ZERO; + _progreavere = ZERO; + _totale_prima_dare = ZERO; + _totale_prima_avere = ZERO; + _saldo_movimenti = ZERO; + _saldo_progressivi = ZERO; + _saldo_progre_prec = ZERO; + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + _protiva = 0; + + _prima_volta = TRUE; + + _stampa_progressivi_si = TRUE; + } + + return TRUE; +} + +bool TMastrini_application::set_print(int) +{ + KEY tasto; + TLocalisamfile* fl; + TString data1,data2; + + _puoi_stampare = TRUE; + + _msk->set_handler (F_DATAINI ,data_inizio); + _msk->set_handler (F_DATAFINE ,data_fine); + + tasto = _msk->run(); + + if (tasto == K_ENTER) + { + _annomsk = atoi(_msk->get(F_ANNO)); + + _stampaprogre = (bool)(_msk->get(F_STAMPAPROGRE) == "X"); + _stampatotiva = (bool)(_msk->get(F_STAMPATOTIVA) == "X"); + _stampanum = atoi(_msk->get(F_STAMPANUM)); + _stampa_mov_prov = (bool)(_msk->get(F_STAMPAMOVPROV) == "X"); + int gruppoini = atoi(_msk->get(F_GRUPPOINI)); + int contoini = atoi(_msk->get(F_CONTOINI_CONTO)); + long sottocontoini = atol(_msk->get(F_SOTTOCINI_CONTO)); + int gruppofine = atoi(_msk->get(F_GRUPPOFINE)); + int contofine = atoi(_msk->get(F_CONTOFINE_CONTO)); + long sottocontofine = atol(_msk->get(F_SOTTOCFINE_CONTO)); + _tipostampa = atoi(_msk->get(F_TIPOSTAMPA)); + _numcarat = atoi(_msk->get(F_NUMCARAT)); + int formato = atoi(_msk->get(F_FORMATO)); + _nummast = atoi(_msk->get(F_NUMMAST)); + _codice_ditta = get_firm(); + + ricerca_dati_ditta(); + + if (_annomsk != 0) + _anno_corrente = _annomsk; + else + if (_annomsk == 0) + _anno_corrente = _anno_ghost; + + _anno_precedente = _anno_corrente - 1; + +// Scelta del formato e del numero di mastrini per pagina 1 o 2 + + //if (nummast == 1) + // crt = formato; + //else + // crt = (formato / 2); + + //printer().formlen(crt); + +//Crea il cursore su gruppo, conto e sottoconto del file RMOV + + reset_files(); //resetta l'albero di stampa + add_file(LF_SALDI); + add_file(LF_RMOV,LF_SALDI); + + select_cursor(_cur1); + fl = &(current_cursor()->file(LF_SALDI)); + TRectype da (fl->curr()); + TRectype a (fl->curr()); + + da.zero(); + a.zero(); + + da.put(SLD_GRUPPO,gruppoini); + da.put(SLD_CONTO,contoini); + da.put(SLD_SOTTOCONTO,sottocontoini); + + a.put(SLD_GRUPPO,gruppofine); + a.put(SLD_CONTO,contofine); + a.put(SLD_SOTTOCONTO,sottocontofine); + + current_cursor()->setregion(da, a); + + if (_stampatotiva) + _b.destroy(); + + _inizio_stampa = TRUE; + _numero_pag = 1; + _pagina = 1; + _cambia_mastrino = FALSE; + _rw = 0; + _conta_mastrini = 0; + _indice_lista = 0; + _ddociva_len = 0; + + _riga.destroy(); + _lista.destroy(); + + switch (_tipostampa) + { + case 1: _totale_saldo = 1; + break; + case 2: _totale_saldo = 0; + break; + case 3: _totale_saldo = 1; + break; + default: break; + } + + enable_print_menu(); + + enable_link("Collegamento prima nota: ", 'r'); + + return TRUE; + } + else + return FALSE; +} + +void TMastrini_application::data_fine_esercizio(int anno) +{ + TString16 dep; + + _tabesc->curr().zero(); + dep << format ("%04d", anno); + _tabesc->curr().put("CODTAB", (const char*) dep); + _tabesc->read(); + _data_finese = _tabesc->curr().get("D1"); + _data_inizioese = _tabesc->curr().get("D0"); +} + +void TMastrini_application::preprocess_header() +{ + if (_nummast == 1) + { + if (_tipostampa == 3) + crea_intestazione(); + else + if (_tipostampa == 2) + { + if ((_totale_saldo != 0) && (_puoi_stampare)) + crea_intestazione(); + } + else if (_tipostampa == 1) + if (_puoi_stampare) + crea_intestazione(); + } +} + +void TMastrini_application::conto(int gruppo, int conto, bool no_contropartita) +{ + TLocalisamfile pconti(LF_PCON); + + pconti.setkey(1); + pconti.zero(); + pconti.put(PCN_GRUPPO, gruppo); + pconti.put(PCN_CONTO , conto); + pconti.read(); + if (pconti.bad()) + pconti.zero(); + + if (no_contropartita) + { + _indbil = pconti.get_int(PCN_INDBIL); + _tmcf = pconti.get_char(PCN_TMCF); + } + else + _tipo_contr = pconti.get_char(PCN_TMCF); +} + +void TMastrini_application::ricerca_dati_ditta() +{ + long app; + + _nditte->setkey(1); + _nditte->curr().zero(); + _nditte->curr().put(NDT_CODDITTA,_codice_ditta); + _nditte->read(); + app=_nditte->curr().get_long(NDT_CODDITTA); + _ragsoc=_nditte->curr().get(NDT_RAGSOC); + + _unloc->setkey(1); + _unloc->curr().zero(); + _unloc->curr().put(ULC_CODDITTA,app); + _unloc->curr().put(ULC_CODULC,"1"); + _unloc->read(); + _indulc=_unloc->curr().get(ULC_INDULC); + _civulc=_unloc->curr().get(ULC_CIVULC); + _capulc=_unloc->curr().get(ULC_CAPULC); + _comulc=_unloc->curr().get(ULC_COMULC); + + _comuni->setkey(1); + _comuni->zero(); + _comuni->put(COM_COM,_comulc); + _comuni->read(); + if (_comuni->good()) + { + _com=_comuni->get(COM_DENCOM); + _prov=_comuni->get(COM_PROVCOM); + } + else + { + _com=""; + _prov=""; + } +} + +// Crea l'intestazione per la stampa a 132 e a 198 caratteri + +void TMastrini_application::crea_intestazione() +{ + TString sep(132),sep1(198); + + reset_header(); + + if (_cambia_mastrino) + { + _pagina = 1; + _cambia_mastrino = FALSE; + } + + if (_numcarat == 1) + { + sep << "Pag. " << _pagina; + sep.right_just(132); + set_header(1,(const char*) sep); + sep =""; + set_header(2,"@1g%s",(const char*) sep); + //set_header(1,"@126gPag. %2d", _numero_pag++); + } + else if (_numcarat == 2) + { + sep1 << "Pagina " << _pagina; + sep1.right_just(198); + set_header(1,(const char*) sep1); + sep1 =""; + set_header(2,"@1g%s",(const char*) sep1); + //set_header(1,"@190gPagina %2d", _numero_pag++); + } + + _pagina++; + + set_header (1, "@0gDITTA@6g%5ld", _codice_ditta); + set_header (1, "@12g%-.45s", (const char*) _ragsoc); + set_header (1, "@59g%-.25s", (const char*) _indulc); + set_header (1, "@86g%-.9s", (const char*) _civulc); + set_header (1, "@97g%-.5s", (const char*) _capulc); + set_header (1, "@103g%-.18s", (const char*) _com); + set_header (1, "@122g%-.3s", (const char*) _prov); + + set_header (3, "@0gSottoconto@12g%d", _gruppo); + set_header (3, "@16g%d", _conto); + set_header (3, "@20g%ld", _sottoc); + + if (_tmcf == 'C') + _tipo_mask = 1; + else if (_tmcf == 'F') + _tipo_mask = 2; + else if (_tmcf == '\0') + _tipo_mask = 3; + switch (_tipo_mask) + { + case 1: ricerca_clifo(); + break; + case 2: ricerca_clifo(); + break; + case 3: ricerca_gruppo(); + break; + default: break; + } + + if (_numcarat == 1) + { + sep.fill('-'); //Stampa 132 - (sep(132)) + set_header (6, (const char *) sep); + set_header (7,"Operazione@19gDocumento@117gContro@131gA"); + if (_stampa_mov_prov) + set_header(7,"@129gM"); + set_header (8,"Data"); + if (_stampanum < 3) + set_header (8,"@11gnumero"); + set_header (8,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); + if (_stampa_mov_prov) + set_header(8,"@129gP"); + sep.fill('-'); + set_header (9, (const char *) sep); + } + else if (_numcarat == 2) + { + sep1.fill('-'); //Stampa 198 - (sep1(198)) + set_header (6,"@0g%s", (const char *) sep1); + set_header (7,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); + if (_stampa_mov_prov) + set_header(7,"@195gM"); + set_header (8,"Data"); + if (_stampanum < 3) + set_header (8,"@11gnumero"); + set_header (8,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere@133gSaldo progress.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); + if (_stampa_mov_prov) + set_header(8,"@195gP"); + sep1.fill('-'); + set_header (9,"@0g%s", (const char *) sep1); + } + + calcola_progressivi(); + _saldo_progressivi += _saldo_progre_prec; + + if (_stampa_progressivi_si) + { + if (_numcarat == 1) + { + TString string = _saldo_progre_prec.string("###.###.###.###"); + set_header (10,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); + string = _progredare.string("###.###.###.###"); + set_header (10,"@85g%15s",(const char*) string); + string = _progreavere.string("###.###.###.###"); + set_header (10,"@101g%15s",(const char*) string); + } + if (_numcarat == 2) + { + TString string = _progredare.string("###.###.###.###"); + set_header (10,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); + string = _progreavere.string("###.###.###.###"); + set_header (10,"@117g%15s",(const char*) string); + string = _saldo_progre_prec.string("###.###.###.###"); + set_header (10,"@133g%15s",(const char*) string); + } + _riporto_dare = _progredare; + _riporto_avere = _progreavere; + _stampa_progressivi_si = FALSE; + } + else + { + _riporto_dare += _riporto_parziale_dare; + _riporto_avere += _riporto_parziale_avere; + if (_numcarat == 1) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_header (10,"@32gA RIPORTO@85g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_header (10,"@101g%15s",(const char*) string); + } + if (_numcarat == 2) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_header (10,"@32gA RIPORTO@101g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_header (10,"@117g%15s",(const char*) string); + } + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + } + if (_numcarat == 1) + { + sep =""; + set_header(11,"@1g%s",(const char*) sep); + } + else if (_numcarat == 2) + { + sep1 =""; + set_header(11,"@1g%s",(const char*) sep1); + } +} + +int TMastrini_application::crea_intestazione(int start_riga) +{ + TString sep(132),sep1(198); + int r = start_riga + 2; + + reset_header(); + + _conta_mastrini++; + + if (_nummast == 2) + if (_cambia_mastrino) + { + _numero_pag = 1; + _cambia_mastrino = FALSE; + } + + if (_numcarat == 1) + set_row(r,"@126gPag. %2d", _numero_pag++); + else if (_numcarat == 2) + set_row(r,"@190gPagina %2d", _numero_pag++); + + set_row (r, "@0gDITTA@6g%5ld", _codice_ditta); + set_row (r, "@12g%-45s", (const char*) _ragsoc); + set_row (r, "@59g%-25s", (const char*) _indulc); + set_row (r, "@86g%-9s", (const char*) _civulc); + set_row (r, "@97g%-5s", (const char*) _capulc); + set_row (r, "@103g%-18s", (const char*) _com); + set_row (r, "@122g%-3s", (const char*) _prov); + r += 2; + set_row (r, "@0gSottoconto@12g%d", _gruppo); + set_row (r, "@16g%d", _conto); + set_row (r, "@20g%ld", _sottoc); + + if (_tmcf == 'C') + _tipo_mask = 1; + else if (_tmcf == 'F') + _tipo_mask = 2; + else if (_tmcf == '\0') + _tipo_mask = 3; + switch (_tipo_mask) + { + case 1: r = ricerca_clifo(r); + break; + case 2: r = ricerca_clifo(r); + break; + case 3: r = ricerca_gruppo(r); + break; + default: break; + } + + r++; + + if (_numcarat == 1) + { + sep.fill('-'); //Stampa 132 - (sep(132)) + set_row (r++,"@1g%s", (const char *) sep); + set_row (r++,"Operazione@19gDocumento@117gContro@131gA"); + if (_stampa_mov_prov) + set_header(r-1,"@129gM"); + set_row (r,"Data"); + if (_stampanum < 3) + set_row (r,"@11gnumero"); + set_row (r++,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); + if (_stampa_mov_prov) + set_header(r-1,"@129gP"); + sep.fill('-'); + set_row (r++,"@1g%s", (const char *) sep); + } + else if (_numcarat == 2) + { + sep1.fill('-'); //Stampa 198 - (sep1(198)) + set_row (r++,"@0g%s", (const char *) sep1); + set_row (r++,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); + if (_stampa_mov_prov) + set_row(r-1,"@195gM"); + set_row (r,"Data"); + if (_stampanum < 3) + set_row (r,"@11gnumero"); + set_row (r,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere"); + set_row (r++,"@133gSaldo progress.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); + if (_stampa_mov_prov) + set_row (r-1,"@195gP"); + sep1.fill('-'); + set_row (r++,"@0g%s", (const char *) sep1); + } + + return r; +} + +void TMastrini_application::stampa_progre_riporto() +{ + TString sep(132),sep1(198); + + if (_nummast == 1 || _nummast == 3) + _rw = 1; + + if (_stampa_progressivi_si) + { + stampa_progressivi(); + _riporto_dare = _progredare; + _riporto_avere = _progreavere; + _stampa_progressivi_si = FALSE; + } + else + { + _riporto_dare += _riporto_parziale_dare; + _riporto_avere += _riporto_parziale_avere; + if (_numcarat == 1) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_row (_rw,"@32gA RIPORTO@85g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_row (_rw++,"@101g%15s",(const char*) string); + } + if (_numcarat == 2) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_row (_rw,"@32gA RIPORTO@101g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_row (_rw++,"@117g%15s",(const char*) string); + } + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + } + if (_numcarat == 1) + { + sep =""; + set_row(_rw,"@1g%s",(const char*) sep); + } + else if (_numcarat == 2) + { + sep1 =""; + set_row(_rw,"@1g%s",(const char*) sep1); + } +} + +int TMastrini_application::stampa_progre_riporto(int start_riga) +{ + TString sep(132),sep1(198); + int r = start_riga; + + if (_stampa_progressivi_si) + { + r = stampa_progressivi(r); + _riporto_dare = _progredare; + _riporto_avere = _progreavere; + _stampa_progressivi_si = FALSE; + } + else + { + _riporto_dare += _riporto_parziale_dare; + _riporto_avere += _riporto_parziale_avere; + if (_numcarat == 1) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_row (r,"@32gA RIPORTO@85g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_row (r++,"@101g%15s",(const char*) string); + } + if (_numcarat == 2) + { + TString string = _riporto_dare.string("###.###.###.###"); + set_row (r,"@32gA RIPORTO@101g%15s",(const char*) string); + string = _riporto_avere.string("###.###.###.###"); + set_row (r++,"@117g%15s",(const char*) string); + } + _riporto_parziale_dare = ZERO; + _riporto_parziale_avere = ZERO; + } + if (_numcarat == 1) + { + sep =""; + set_row(r++,"@1g%s",(const char*) sep); + } + else if (_numcarat == 2) + { + sep1 =""; + set_row(r++,"@1g%s",(const char*) sep1); + } + return r; +} + +void TMastrini_application::calcola_progressivi_al() +{ + long record,sottoc,annoes; + int gruppo,conto; + TDate datareg, datacomp; + TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); + char sezione; + real importo; + TDate data; + + + record = rmov.recno(); + rmov.zero(); + rmov.put(RMV_GRUPPO, _gruppo); + rmov.put(RMV_CONTO, _conto); + rmov.put(RMV_SOTTOCONTO, _sottoc); + for (rmov.read();!rmov.eof() ;rmov.next()) + { + annoes = rmov.get_int (RMV_ANNOES); + datareg = rmov.get_date(RMV_DATAREG); + sezione = rmov.get (RMV_SEZIONE)[0]; + importo = rmov.get_real(RMV_IMPORTO); + long numreg = rmov.get_long(RMV_NUMREG); + + _mov->setkey(1); + _mov->curr().zero(); + _mov->curr().put(MOV_NUMREG,numreg); + _mov->read(); + if (_mov->bad()) + _mov->zero(); + datacomp = (_mov->curr().get(MOV_DATACOMP)); + + if (_annomsk == 0) + { + datareg = rmov.get_date(RMV_DATAREG); + data = _inizioes; + } + else + if (_annomsk != 0) + { + datareg = datacomp; + data = _data_inizioese; + } + + gruppo = rmov.get_int(RMV_GRUPPO); + conto = rmov.get_int(RMV_CONTO); + sottoc = rmov.get_long(RMV_SOTTOCONTO); + if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) + break; + else if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data)&&(datareg < _data_ini)) //Legge movimenti con data < data iniziale + if (sezione == 'D') + _totale_prima_dare += importo; + else if (sezione == 'A') + _totale_prima_avere += importo; + } + rmov.readat(record); +} + +void TMastrini_application::calcola_progressivi() +{ + TLocalisamfile saldi(LF_SALDI, FALSE); + real pdaresca,paveresca,pdarescap,paverescap; + real progdare_attuale,progavere_attuale,progdare_prec,progavere_prec; + real saldo,progredare_eseprec,progreavere_eseprec,pdarep,paverep; + char salini; + + saldo = ZERO; + pdarep = ZERO; + paverep = ZERO; + pdaresca = ZERO; + paveresca = ZERO; + pdarescap = ZERO; + paverescap = ZERO; + +// Ricerca sull'archivio saldi dei record con gruppo,conto,sottoconto +// uguali a quelli di rmov per il calcolo dei progressivi precedenti + + TRectype record(saldi.curr()); + + record.zero(); + record.put(SLD_GRUPPO, _gruppo); + record.put(SLD_CONTO, _conto); + record.put(SLD_SOTTOCONTO, _sottoc); + + saldi.setkey(2); + + saldi.zero(); + saldi.put(SLD_GRUPPO, _gruppo); + saldi.put(SLD_CONTO, _conto); + saldi.put(SLD_SOTTOCONTO, _sottoc); + + for (saldi.read(_isgteq); saldi.good(); saldi.next()) + { + if (saldi.curr() != record) + break; + + int annoes_saldi = saldi.curr().get_int(SLD_ANNOES); + +//Calcola i progressivi dell'esercizio attuale + + if (annoes_saldi == _anno_corrente) + { + pdaresca = saldi.get_real(SLD_PDARESCA); + paveresca = saldi.get_real(SLD_PAVERESCA); + progdare_attuale = saldi.get_real(SLD_PDARE); + progavere_attuale = saldi.get_real(SLD_PAVERE); + saldo = saldi.get_real(SLD_SALDO); + salini = saldi.get(SLD_FLAGSALINI)[0]; + _ultima_data_reg = saldi.get_date(SLD_DATAULMOV); + } + +//Calcola i progressivi dell'esercizio precedente + + if (annoes_saldi == _anno_precedente) + { + pdarescap = saldi.get_real(SLD_PDARESCA); + pdarep = saldi.get_real(SLD_PDARE); + paverescap = saldi.get_real(SLD_PAVERESCA); + paverep = saldi.get_real(SLD_PAVERE); + } + +// Se il saldo dell'esercizio attuale e' diverso da 0 allora significa che +// quello corrisponde al saldo finale dell'esercizio precedente. Per ottenere +// i progressivi dell'esercizio precedente devo a questo punto sommare i +// progressivi dell'esercizio e i progressivi di quelli scaricati, tenendo +// conto del flag salini per sapere se il saldo e' dare oppure avere. + +/* + if (_annomsk != 0 && _anno_corrente == annoes_saldi) + { + if (saldo != ZERO) + { + if (salini == 'D') + { + progredare_eseprec = saldo;// + pdarescap + pdarep; + progdare_prec = saldo; + } + else if (salini == 'A') + { + progreavere_eseprec = saldo;// + paverescap + paverep; + progavere_prec = saldo; + } + } + } +*/ + } // FOR + +//Se il saldo dell'esercizio attuale non e' diverso da zero, allora il saldo +// finale dell'esercizio precedente devo calcolarmelo tenendo conto dell'indbil + + if (_annomsk != 0 /*&& saldo == ZERO*/) + { + if ((_indbil == 1) || (_indbil == 2) || (_indbil == 5)) + { + const TRecnotype pos = saldi.recno(); + saldo = _sld->saldofin_esprec(_anno_corrente,_gruppo,_conto,_sottoc); + saldi.readat(pos); + + if (saldo> ZERO) + { + progredare_eseprec = saldo;// + pdarescap + pdarep; + progdare_prec = saldo; + } + else if (saldo < ZERO) + { + saldo = -saldo; + progreavere_eseprec = saldo;// + paverescap + paverep; + progavere_prec = saldo; + } + } + } + + calcola_progressivi_al(); + +//Calcolo dei progressivi precedenti: somma di tutti quei movimenti di rmov +//che hanno la data di registrazione inferiore alla data di inizio stampa, +//dei progressivi dell'anno esercizio precedente, e dei progressivi dei +//movimenti scaricati dell'esercizio attuale. + + _progredare = pdaresca + progredare_eseprec + _totale_prima_dare; + _progreavere = paveresca + progreavere_eseprec + _totale_prima_avere; + _saldo_progre_prec = _progredare - _progreavere; + +//Calcolo dei progressivi al + +//Se sulla maschera e' stato selezionato il controllo competenza esercizio +//Sommo i progressivi dell'esercizio precedente e quelli dell'esercizio attuale +//altrimenti solo quelli dell'esercizio attuale + + if (_annomsk != 0) + { + _totprogre_dare_al = progdare_attuale + progdare_prec; + _totprogre_avere_al = progavere_attuale + progavere_prec; + } + else + { + _totprogre_dare_al = progdare_attuale; + _totprogre_avere_al = progavere_attuale; + } +} + +void TMastrini_application::stampa_progressivi() +{ + if (_nummast == 1 || _nummast == 3) + _rw = 1; + + if (_numcarat == 1) + { + TString string = _saldo_progre_prec.string("###.###.###.###"); + set_row (_rw,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); + string = _progredare.string("###.###.###.###"); + set_row (_rw,"@85g%15s",(const char*) string); + string = _progreavere.string("###.###.###.###"); + set_row (_rw++,"@101g%15s",(const char*) string); + } + + if (_numcarat == 2) + { + TString string = _progredare.string("###.###.###.###"); + set_row (_rw,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); + string = _progreavere.string("###.###.###.###"); + set_row (_rw,"@117g%15s",(const char*) string); + string = _saldo_progre_prec.string("###.###.###.###"); + set_row (_rw++,"@133g%15s",(const char*) string); + } +} + +int TMastrini_application::stampa_progressivi(int start_riga) +{ + int r = start_riga; + + if (_numcarat == 1) + { + TString string = _saldo_progre_prec.string("###.###.###.###"); + set_row (r,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); + string = _progredare.string("###.###.###.###"); + set_row (r,"@85g%15s",(const char*) string); + string = _progreavere.string("###.###.###.###"); + set_row (r++,"@101g%15s",(const char*) string); + } + + if (_numcarat == 2) + { + TString string = _progredare.string("###.###.###.###"); + set_row (r,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); + string = _progreavere.string("###.###.###.###"); + set_row (r,"@117g%15s",(const char*) string); + string = _saldo_progre_prec.string("###.###.###.###"); + set_row (r++,"@133g%15s",(const char*) string); + } + + return r; +} + +// Se la ricerca selezionata nella maschera e' per clienti, oppure fornitori, // allora ricerco su CLIFO i relativi dati, e su PCON il relativo gruppo,conto,// sottoconto e IV direttiva CEE + +void TMastrini_application::ricerca_clifo() +{ + TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; + TLocalisamfile clifo(LF_CLIFO); + TLocalisamfile pconti(LF_PCON); + TString16 dataini,datafine; + TString descriz,descriz2; + int numrivd; + + clifo.setkey(1); + clifo.zero(); + clifo.put(CLI_TIPOCF, _tmcf); + clifo.put(CLI_CODCF, _sottoc); + clifo.read(); + if (clifo.bad()) + clifo.zero(); + TConto tc (_gruppo,_conto,_sottoc,_tmcf); + + ragsoc = tc.descrizione(); + paiv = clifo.get(CLI_PAIV); + cofi = clifo.get(CLI_COFI); + indcf = clifo.get(CLI_INDCF); + indcf.trim(); + indcf << " " << clifo.get(CLI_CIVCF); + capcf = clifo.get(CLI_CAPCF); + ptel = clifo.get(CLI_PTEL); + tel = clifo.get(CLI_TEL); + statocf = clifo.get(CLI_STATOCF); + comcf = clifo.get(CLI_COMCF); + + _comuni->setkey(1); + _comuni->zero(); + _comuni->put(COM_STATO, statocf); + _comuni->put(COM_COM, comcf); + _comuni->read(); + if (_comuni->good()) + { + dencom = _comuni->get(COM_DENCOM); + provcom = _comuni->get(COM_PROVCOM); + } + else + { + dencom=""; + provcom=""; + } + + pconti.setkey(1); + pconti.zero(); + pconti.put(PCN_GRUPPO, _gruppo); + pconti.put(PCN_CONTO, _conto); + pconti.read(); + _sezivd = pconti.get_char(PCN_SEZIVD); + _lettivd = pconti.get_char(PCN_LETTIVD); + numrivd = pconti.get_int(PCN_NUMRIVD); + _numrivd = itor(numrivd); + _numivd = pconti.get_int(PCN_NUMIVD); + + descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); + + if (_numivd != 0) //Ora devo stampare la descrizione del livello della + { //classe immediatamente precedente a quello appena + if (_numrivd != "") //stampato + descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); + else + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + } + else + if (_numrivd != "") + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + else + descriz2 = ""; + + set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); + set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); + set_header(3, "@91g%-.41s",(const char*) ragsoc); + set_header(4, "Classe@8g%c", _lettivd); + set_header(4, "@10g%-8s", (const char*) _numrivd); + if (_numivd != 0) + set_header(4, "@19g%2d", _numivd); + if (descriz2 != "") + { + set_header(4,"@23g%-50s",(const char*) descriz2); + set_header(4,"@80g%-50s",(const char*) descriz); + } + else + set_header(4,"@23g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + datafine = _data_fine.string(); + + if (_annomsk == 0) + { + set_header (5, "Periodo@10g%s", (const char*) dataini); + set_header (5, "@22g%s", (const char*) datafine); + } + else + { + set_header (5, "Comp. da@9g%s", (const char*) dataini); + set_header (5, "@20ga@22g%s", (const char*) datafine); + } + + set_header (5, "@33gP.I.@37g%-11s",(const char*) paiv); + set_header (5, "@49gCF@52g%-16s",(const char*) cofi); + set_header (5, "@69g%-.25s",(const char*) indcf); + set_header (5, "@95g%-5s",(const char*) capcf); + set_header (5, "@101g%-.24s",(const char*) dencom); + set_header (5, "@126g%-5s",(const char*) provcom); + + if (_numcarat == 2) + { + set_header (5,"@134g%-4s",(const char*) ptel); + if (tel != "") + set_header (5,"@138g/@139g%-10s",(const char*) tel); + } +} + +int TMastrini_application::ricerca_clifo(int start) +{ + TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; + TLocalisamfile clifo(LF_CLIFO); + TLocalisamfile pconti(LF_PCON); + TString16 dataini,datafine; + TString descriz,descriz2; + int numrivd; + int r = start; + + clifo.setkey(1); + clifo.zero(); + clifo.put(CLI_TIPOCF, _tmcf); + clifo.put(CLI_CODCF, _sottoc); + clifo.read(); + if (clifo.bad()) + clifo.zero(); + TConto tc (_gruppo,_conto,_sottoc,_tmcf); + + ragsoc = tc.descrizione(); + paiv = clifo.get(CLI_PAIV); + cofi = clifo.get(CLI_COFI); + indcf = clifo.get(CLI_INDCF); + indcf.trim(); + indcf << " " << clifo.get(CLI_CIVCF); + capcf = clifo.get(CLI_CAPCF); + ptel = clifo.get(CLI_PTEL); + tel = clifo.get(CLI_TEL); + statocf = clifo.get(CLI_STATOCF); + comcf = clifo.get(CLI_COMCF); + + _comuni->setkey(1); + _comuni->zero(); + _comuni->put(COM_STATO, statocf); + _comuni->put(COM_COM, comcf); + _comuni->read(); + if (_comuni->good()) + { + dencom = _comuni->get(COM_DENCOM); + provcom = _comuni->get(COM_PROVCOM); + } + else + { + dencom=""; + provcom=""; + } + + pconti.setkey(1); + pconti.zero(); + pconti.put(PCN_GRUPPO, _gruppo); + pconti.put(PCN_CONTO, _conto); + pconti.read(); + _sezivd = pconti.get_char(PCN_SEZIVD); + _lettivd = pconti.get_char(PCN_LETTIVD); + numrivd = pconti.get_int(PCN_NUMRIVD); + _numrivd = itor(numrivd); + _numivd = pconti.get_int(PCN_NUMIVD); + + descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); + + if (_numivd != 0) //Ora devo stampare la descrizione del livello della + { //classe immediatamente precedente a quello appena + if (_numrivd != "") //stampato + descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); + else + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + } + else + if (_numrivd != "") + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + else + descriz2 = ""; + + set_row (r,"@27g%-30s",(const char*) descrizione_gruppo()); + set_row (r,"@59g%-30s",(const char*) descrizione_conto()); + set_row(r++, "@91g%-30s",(const char*) ragsoc); + set_row(r, "Classe@8g%c", _lettivd); + set_row(r, "@10g%-8s", (const char*) _numrivd); + if (_numivd != 0) + set_row(r, "@19g%2d", _numivd); + if (descriz2 != "") + { + set_row(r,"@23g%-50s",(const char*) descriz2); + set_row(r,"@80g%-50s",(const char*) descriz); + } + else + set_row(r++,"@23g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + datafine = _data_fine.string(); + + if (_annomsk == 0) + { + set_row (r, "Periodo@10g%s", (const char*) dataini); + set_row (r, "@22g%s", (const char*) datafine); + } + else + { + set_row (r, "Comp. da@9g%s", (const char*) dataini); + set_row (r, "@20ga@22g%s", (const char*) datafine); + } + + set_row (r, "@33gP.I.@37g%-11s",(const char*) paiv); + set_row (r, "@49gCF@52g%-16s",(const char*) cofi); + set_row (r, "@69g%-25s",(const char*) indcf); + set_row (r, "@95g%-5s",(const char*) capcf); + set_row (r, "@101g%-24s",(const char*) dencom); + set_row (r, "@126g%-5s",(const char*) provcom); + + if (_numcarat == 2) + { + set_row (r,"@134g%-4s",(const char*) ptel); + if (tel != "") + set_row (r++,"@138g/@139g%-10s",(const char*) tel); + } + return r; +} + + +// Se la ricerca selezionata sulla maschera e' per gruppo, conto, sottoconto +// ricerca i corrispondenti su PCON, con relativa IV direttiva CEE + +void TMastrini_application::ricerca_classe_IV(bool scelta) +{ + TLocalisamfile pconti(LF_PCON); + + pconti.setkey(1); + pconti.zero(); + pconti.put(PCN_GRUPPO, _gruppo); + pconti.put(PCN_CONTO, _conto); + if (scelta) + pconti.put(PCN_SOTTOCONTO, _sottoc); + pconti.read(); + _sezivd = pconti.get_char(PCN_SEZIVD); + _lettivd = pconti.get_char(PCN_LETTIVD); + _numrivd_int = pconti.get_int (PCN_NUMRIVD); + _numrivd = itor(_numrivd_int); + _numivd = pconti.get_int (PCN_NUMIVD); +} + +void TMastrini_application::ricerca_gruppo() +{ + TString80 descr,descriz,descriz2,dep; + TString dataini,datafine; + + ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto + + if (_sezivd == '0') //Non esiste a livello di sottoconto + ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto + + descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); + if (_numivd != 0) //Ora devo stampare la descrizione del livello della + { //classe immediatamente precedente a quello appena + if (_numrivd != "") //stampato + descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); + else + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + } + else + if (_numrivd != "") + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + else + descriz2 = ""; + + set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); + set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); + + set_header(3,"@91g%-.41s",(const char*) descrizione_sottoconto()); + set_header(4, "@0gClasse@12g%c", _lettivd); + set_header(4, "@14g%-8s",(const char*) _numrivd); + if (_numivd != 0) + set_header(4, "@23g%d", _numivd); + if (descriz2 != "") + { + set_header(4,"@27g%-50s",(const char*) descriz2); + set_header(4,"@80g%-50s",(const char*) descriz); + } + else + set_header(4,"@27g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + datafine = _data_fine.string(); + + if (_annomsk == 0) + { + set_header (5, "Periodo@12g%s", (const char*) dataini); + set_header (5, "@24g%s", (const char*) datafine); + } + else + { + set_header (5, "Periodo di competenza@23g%s", (const char*) dataini); + set_header (5, "@35g%s", (const char*) datafine); + } +} + +int TMastrini_application::ricerca_gruppo(int start) +{ + TString80 descr,descriz,descriz2,dep; + TString dataini,datafine; + int r = start; + + ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto + + if (_sezivd == '0') //Non esiste a livello di sottoconto + ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto + + descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); + if (_numivd != 0) //Ora devo stampare la descrizione del livello della + { //classe immediatamente precedente a quello appena + if (_numrivd != "") //stampato + descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); + else + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + } + else + if (_numrivd != "") + descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); + else + descriz2 = ""; + + set_row(r,"@27g%-.30s",(const char*) descrizione_gruppo()); + set_row(r,"@59g%-.30s",(const char*) descrizione_conto()); + + set_row(r++,"@91g%-.41s",(const char*) descrizione_sottoconto()); + set_row(r, "@0gClasse@12g%c", _lettivd); + set_row(r, "@14g%-8s",(const char*) _numrivd); + if (_numivd != 0) + set_row(r, "@23g%d", _numivd); + if (descriz2 != "") + { + set_row(r,"@27g%-50s",(const char*) descriz2); + set_row(r++,"@80g%-50s",(const char*) descriz); + } + else + set_row(r++,"@27g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + datafine = _data_fine.string(); + + if (_annomsk == 0) + { + set_row (r, "Periodo@12g%s", (const char*) dataini); + set_row (r, "@24g%s", (const char*) datafine); + } + else + { + set_row (r, "Periodo di competenza@23g%s", (const char*) dataini); + set_row (r, "@35g%s", (const char*) datafine); + } + return r; +} + +const char* TMastrini_application::descrizione_classe(char sezione, char lettera, int numr, int numero) +{ + TTable tabivd(TAB_IVD); + TString dep,dep2; + + tabivd.zero(); + if (numr == 0 && numero == 0) + dep = format("%c%c",sezione,lettera); + else + if (numero == 0) + { + if (numr != 0) + dep = format("%1c%1c%04d",sezione, lettera, numr); + else + dep = format("%c%c ",sezione,lettera); + } + else + { + if (numr != 0) + dep = format("%1c%1c%04d%02d",sezione, lettera, numr,numero); + else + dep = format("%c%c %02d",sezione,lettera,numero); + } + + tabivd.put("CODTAB", dep); + tabivd.read(); + dep2 = tabivd.get("CODTAB"); + if (dep == dep2) + TMP = tabivd.get("S0"); + else + TMP = ""; + return TMP; +} + +//Ricerca la descrizione relativa al gruppo da stampare + +const char* TMastrini_application::descrizione_gruppo() +{ + TLocalisamfile pconti(LF_PCON); + + pconti.zero(); + pconti.put(PCN_GRUPPO,_gruppo); + if (pconti.read() != NOERR) pconti.zero(); + TMP = pconti.get(PCN_DESCR); + return TMP; +} + +// Ricerca la descrizione relativa al conto da stampare + +const char* TMastrini_application::descrizione_conto() +{ + TLocalisamfile pconti(LF_PCON); + + pconti.zero(); + pconti.put(PCN_GRUPPO,_gruppo); + pconti.put(PCN_CONTO,_conto); + if (pconti.read() != NOERR) pconti.zero(); + TMP = pconti.get(PCN_DESCR); + return TMP; +} + +const char* TMastrini_application::descrizione_sottoconto() +{ + TLocalisamfile pconti(LF_PCON); + + pconti.zero(); + pconti.put(PCN_GRUPPO, _gruppo); + pconti.put(PCN_CONTO, _conto); + pconti.put(PCN_SOTTOCONTO, _sottoc); + if (pconti.read() != NOERR) pconti.zero(); + TMP = pconti.get(PCN_DESCR); + return TMP; +} + +bool TMastrini_application::user_create() +{ + TToken_string exp; + + _rel = new TRelation (LF_SALDI); + + exp.add("GRUPPO=GRUPPO"); + exp.add("CONTO=CONTO"); + exp.add("SOTTOCONTO=SOTTOCONTO"); + _rel->add(LF_RMOV,exp,2,LF_SALDI); + + _cur1=add_cursor(new TCursor(_rel,"",2)); + + _nditte = new TLocalisamfile (LF_NDITTE); + _unloc = new TLocalisamfile (LF_UNLOC); + _comuni = new TLocalisamfile (LF_COMUNI); + _mov = new TLocalisamfile (LF_MOV); + _clifo = new TLocalisamfile (LF_CLIFO); + _caus = new TLocalisamfile (LF_CAUSALI); + _tabivd = new TTable (TAB_IVD); + _tabtpd = new TTable (TAB_TPD); + _tabreg = new TTable (TAB_REG); + _tabesc = new TTable (TAB_ESC); + _sld = new TSaldo (); + + _d18 = new TParagraph_string ("",18); + _d23 = new TParagraph_string ("",23); + _d30 = new TParagraph_string ("",30); + + _msk = new TMask("cg3200a"); + _msk->set_handler(F_SOTTOCINI_CONTO, sottoc_handler_ini); + _msk->set_handler(F_SOTTOCINI_CLIENTE, sottoc_handler_ini); + _msk->set_handler(F_SOTTOCINI_FORN, sottoc_handler_ini); + _msk->set_handler(F_SOTTOCFINE_CONTO, sottoc_handler_fine); + _msk->set_handler(F_SOTTOCFINE_CLIENTE, sottoc_handler_fine); + _msk->set_handler(F_SOTTOCFINE_FORN, sottoc_handler_fine); + + _msk->set_handler (F_GRUPPOFINE ,gruppo_hnd); + _msk->set_handler (F_CONTOINI_CONTO ,contoi_hnd); + _msk->set_handler (F_CONTOINI_CLIENTE ,contoi_hnd); + _msk->set_handler (F_CONTOINI_FORN ,contoi_hnd); + _msk->set_handler (F_CONTOFINE_CONTO ,contof_hnd); + _msk->set_handler (F_CONTOFINE_CLIENTE ,contof_hnd); + _msk->set_handler (F_CONTOFINE_FORN ,contof_hnd); + +// _msk->set_handler (F_SOTTOCFINE_CONTO ,sottoc_hnd); +// _msk->set_handler (F_SOTTOCFINE_CLIENTE ,sottoc_hnd); +// _msk->set_handler (F_SOTTOCFINE_FORN ,sottoc_hnd); + + return TRUE; +} + +bool TMastrini_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _mov; + delete _nditte; + delete _unloc; + delete _comuni; + delete _clifo; + delete _caus; + delete _tabivd; + delete _tabtpd; + delete _tabreg; + delete _tabesc; + delete _sld; + delete _d18; + delete _d23; + delete _d30; + + return TRUE; + +} + +int cg3200(int argc, char* argv[]) +{ + + TMastrini_application a; + + a.run(argc, argv, "Stampa Mastrini"); + + return 0; +} + diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index f13913894..e80b16ec1 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -147,7 +147,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) look_lim(liq_month(month), TRUE); - if (_isregis && _lim->get_bool("B1") && _month != 13) + if (_isfinal && _lim->get_bool("B1") && _month != 13) return TRUE; TConfig cnf(CONFIG_DITTA, "cg"); @@ -1578,6 +1578,8 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) TString s7 = _lim->get("S7"); TString s0 = _lim->get("S0"); TString s1 = _lim->get("S1"); + bool wasb0 = _lim->get_bool("B0"); + bool wasb1 = _lim->get_bool("B1"); _lim->zero(); _lim->put("CODTAB", codtab); @@ -1585,7 +1587,9 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) _lim->put("R5", r5); _lim->put("S0", s0); _lim->put("S1", s1); - _lim->put("S7", s7); + _lim->put("S7", s7); + _lim->put("B0", wasb0 ? "X" : ""); + _lim->put("B1", wasb1 ? "X" : ""); /* * versamenti effettuati: si conteggiano in R0, diff --git a/cg/cg4400.h b/cg/cg4400.h index 7f499d631..3cd3db56a 100755 --- a/cg/cg4400.h +++ b/cg/cg4400.h @@ -1,160 +1,160 @@ -// -// cg4400.h -// -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "cglib03.h" -#include "cglib04.h" -#include "conto.h" - -enum messaggio { - no_liquidazione, - B0_settato, - non_proseguire, - prosegui_stampa, - prosegui_cal_stampa - }; - -class CG4400_application : public TPrintapp -{ - TCursor * _cur; - TRelation *_rel, *_nditte; - TLocalisamfile *_clifo, *_occas, *_tab, *_tabcom, *_com, *_anag, *_unloc, *_attiv, *_indlib; - TTable *_tabreg, *_tablbu, *_tablim, *_tabpim, *_tablia, *_tabiva; - TTable *_tabpla, *_tabppa, *_tabvid; - TRigaiva_array _iva_array, _riga_rmi; - TTipodoc_array _doc_array; - TRiga_array _tot_iva_array; - TBit_array _selected; - TArray_sheet *_ditte; - TArray _nomiditte; - bool _st_liq[13]; - bool _test; - TRecnotype _nrec; - bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri, _auto_intraf, _stampa; - bool _corrispettivi, _liquidazione, _riep_liq, _stampa_ind_comp, _esiste_riga_iva, _stampa_cred_pre; - bool _rif_vid, _intesta_vidi, _intesta_liq, _stampa_data_reg, _ok_vidi; - bool _sosp_imposta; - char _frequiva, _tipo_riepilogativo; - TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; - TDate _u_data; - long _n_ditte, _u_stampata, _primast, __firm, _uprotivap, _ditta; - long _numini, _pagine_stampate; - int _fino_a_mese, _tipo_reg, _tipo_stampa, _cod_un_loc; - int _annoes, _r, _stampa_width, _mese_ultima_liq, _mese_credito; - int _stampa_len, _stampa_mese, _size_header; - real _totale_doc, _credito; - TString _codreg, _desc_lib, _codatt, _attivita, _tipoatt; - TString _tipodoc, _descr_doc, _codlib, _codice_vidi; - TString _cofi,_cap,_paiva,_ragsoc,_comunefis,_provfis,_viafis; - TFilename _t, _pippo; - - TParagraph_string* _desc27; - messaggio _scelta; - -protected: - - static bool filter_func (const TRelation * r); - static bool mask_tipo_stampa (TMask_field&, KEY); - static bool to_ditt_handler (TMask_field&, KEY); - static bool fr_ditt_handler (TMask_field&, KEY); - static bool to_butt_handler (TMask_field&, KEY); - static bool fr_butt_handler (TMask_field&, KEY); - static bool mask_cod (TMask_field&, KEY); - static bool mask_libun (TMask_field&, KEY); - static bool mask_data (TMask_field&, KEY); - static bool mask_mese (TMask_field&, KEY); - static bool mask_fino_a_mese (TMask_field&, KEY); - static bool mask_select (TMask_field&, KEY); - static bool mask_azzera (TMask_field&, KEY); - static bool year_handler (TMask_field&, KEY); - -public: - - const char* desc_attivita (); - const char* tipo_attivita (); - const char* descr_doc (); - const char* descr_iva (const char *); - TRectype& ricerca_occ(const char*); - TRectype& ricerca_cf (char, long); - TRectype& look_comuni(const char*); - TArray_sheet* get_ditte_sheet() { return _ditte; } - int setta_riga (int, const TRigaiva&, real&, real&, real&, real&); - int riga_rmoviva(); - bool set_print(int); - bool set_ditte(TMask&); - bool compila_reg(const TMask&); - bool compila_lib(); - messaggio controlla_liquidazione(); - messaggio controlla_b0(); - bool controlla_mov(); - bool stampo_liquidazione(int); - bool ventilazione(const char*); - bool cerca_libro_gio(TString&, bool*); - bool look_reg (int, int, TString&, int, const char*, int*, long); - bool look_regs(int, TString&, int, int*, long, bool*); - bool stampa_totali_finali(); - bool stampa_datareg(); - bool stampa_registri_IVA(const TMask&); - bool look_lia(long ditta = 0l); - bool ricerca_mese(TString&,TString&,int,int,TMask_field&); - void set_choice_limits(TMask&); - void build_ditte_sheet(); - void cerca_reg(const TString&, byte*); - void set_page_tot_reg(); - void send_message(char, const TFilename&,int); - void aggiorna_reg(const bool aggiorna_vidi); - void aggiorna_lib(); - void calcola_progressivi(); - void stampa_liq_mesi_succ(); - void look_reg(); - void no_movimenti(); - void liq_b0_settato(); - void liq_other_case(); - bool setta_mask(long); - bool preprocess_page(int, int); - int stampa_intestazione(); - int stampa_prospetto(); - long select_firm_range(long,long); - void stampa_plafonds(int); - void get_dati_ditta(); - void stampa_vidi(); - void scrivi_reg(); - int stampa_acquisti(int); - real stampa_valori_plafonds(const real&, const int, TTable&, const char*); - void build_nomiditte(TProgind* pnd = NULL); - void set_year(int y) { _annoes = y; } - void clear_stliq(); - virtual bool preprocess_print(int, int); - virtual bool user_create(); - virtual bool user_destroy(); - virtual print_action postprocess_page (int, int); - virtual void preprocess_header(); - - CG4400_application() : TPrintapp(), _ditte(NULL), _selected(10000), _nomiditte(100), _test(FALSE) {} - virtual ~CG4400_application() {} -}; - - - - +// +// cg4400.h +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cglib03.h" +#include "cglib04.h" +#include "conto.h" + +enum messaggio { + no_liquidazione, + B0_settato, + non_proseguire, + prosegui_stampa, + prosegui_cal_stampa + }; + +class CG4400_application : public TPrintapp +{ + TCursor * _cur; + TRelation *_rel, *_nditte; + TLocalisamfile *_clifo, *_occas, *_tab, *_tabcom, *_com, *_anag, *_unloc, *_attiv, *_indlib; + TTable *_tabreg, *_tablbu, *_tablim, *_tabpim, *_tablia, *_tabiva; + TTable *_tabpla, *_tabppa, *_tabvid; + TRigaiva_array _iva_array, _riga_rmi; + TTipodoc_array _doc_array; + TRiga_array _tot_iva_array; + TBit_array _selected; + TArray_sheet *_ditte; + TArray _nomiditte; + bool _st_liq[13]; + bool _test; + TRecnotype _nrec; + bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri, _auto_intraf, _stampa; + bool _corrispettivi, _liquidazione, _riep_liq, _stampa_ind_comp, _esiste_riga_iva, _stampa_cred_pre; + bool _rif_vid, _intesta_vidi, _intesta_liq, _stampa_data_reg, _ok_vidi; + bool _sosp_imposta; + char _frequiva, _tipo_riepilogativo; + TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; + TDate _u_data; + long _n_ditte, _u_stampata, _primast, __firm, _uprotivap, _ditta; + long _numini, _pagine_stampate; + int _fino_a_mese, _tipo_reg, _tipo_stampa, _cod_un_loc; + int _annoes, _r, _stampa_width, _mese_ultima_liq, _mese_credito; + int _stampa_len, _stampa_mese, _size_header; + real _totale_doc, _credito; + TString _codreg, _desc_lib, _codatt, _attivita, _tipoatt; + TString _tipodoc, _descr_doc, _codlib, _codice_vidi; + TString _cofi,_cap,_paiva,_ragsoc,_comunefis,_provfis,_viafis; + TFilename _t, _pippo; + + TParagraph_string* _desc27; + messaggio _scelta; + +protected: + + static bool filter_func (const TRelation * r); + static bool mask_tipo_stampa (TMask_field&, KEY); + static bool to_ditt_handler (TMask_field&, KEY); + static bool fr_ditt_handler (TMask_field&, KEY); + static bool to_butt_handler (TMask_field&, KEY); + static bool fr_butt_handler (TMask_field&, KEY); + static bool mask_cod (TMask_field&, KEY); + static bool mask_libun (TMask_field&, KEY); + static bool mask_data (TMask_field&, KEY); + static bool mask_mese (TMask_field&, KEY); + static bool mask_fino_a_mese (TMask_field&, KEY); + static bool mask_select (TMask_field&, KEY); + static bool mask_azzera (TMask_field&, KEY); + static bool year_handler (TMask_field&, KEY); + +public: + + const char* desc_attivita (); + const char* tipo_attivita (); + const char* descr_doc (); + const char* descr_iva (const char *); + TRectype& ricerca_occ(const char*); + TRectype& ricerca_cf (char, long); + TRectype& look_comuni(const char*); + TArray_sheet* get_ditte_sheet() { return _ditte; } + int setta_riga (int, const TRigaiva&, real&, real&, real&, real&); + int riga_rmoviva(); + bool set_print(int); + bool set_ditte(TMask&); + bool compila_reg(const TMask&); + bool compila_lib(); + messaggio controlla_liquidazione(); + messaggio controlla_b0(); + bool controlla_mov(); + bool stampo_liquidazione(int); + bool ventilazione(const char*); + bool cerca_libro_gio(TString&, bool*); + bool look_reg (int, int, TString&, int, const char*, int*, long); + bool look_regs(int, TString&, int, int*, long, bool*); + bool stampa_totali_finali(); + bool stampa_datareg(); + bool stampa_registri_IVA(const TMask&); + bool look_lia(long ditta = 0l); + bool ricerca_mese(TString&,TString&,int,int,TMask_field&); + void set_choice_limits(TMask&); + void build_ditte_sheet(); + void cerca_reg(const TString&, byte*); + void set_page_tot_reg(); + void send_message(char, const TFilename&,int); + void aggiorna_reg(const bool aggiorna_vidi); + void aggiorna_lib(); + void calcola_progressivi(); + void stampa_liq_mesi_succ(); + void look_reg(); + void no_movimenti(); + void liq_b0_settato(); + void liq_other_case(); + bool setta_mask(long); + bool preprocess_page(int, int); + int stampa_intestazione(); + int stampa_prospetto(); + long select_firm_range(long,long); + void stampa_plafonds(int); + void get_dati_ditta(); + void stampa_vidi(); + void scrivi_reg(); + int stampa_acquisti(int); + real stampa_valori_plafonds(const real&, const int, TTable&, const char*); + void build_nomiditte(TProgind* pnd = NULL); + void set_year(int y) { _annoes = y; } + void clear_stliq(); + virtual bool preprocess_print(int, int); + virtual bool user_create(); + virtual bool user_destroy(); + virtual print_action postprocess_page (int, int); + virtual void preprocess_header(); + + CG4400_application() : TPrintapp(), _ditte(NULL), _selected(10000), _nomiditte(100), _test(FALSE) {} + virtual ~CG4400_application() {} +}; + + + + diff --git a/cg/cg4400a.uml b/cg/cg4400a.uml index 414b4de42..c627ac3ba 100755 --- a/cg/cg4400a.uml +++ b/cg/cg4400a.uml @@ -1,272 +1,272 @@ -// cg4400a.uml -// Stampa tabella registri - -#include "cg4400a.h" - -PAGE "Stampa registri IVA" -1 -1 56 18 - -LISTBOX TIPO_STAMPA 1 48 -BEGIN - PROMPT 2 1 "Tipo " - HELP "Indicare il tipo di stampa da eseguire" - ITEM "1|Stampa di prova" - MESSAGE SHOW,3@|SHOW,CODICE_LIBRO_PROVA|SHOW,DATA_STAMPA|SHOW,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID|HIDE,1@|RESET,1@|HIDE,2@|RESET,2@ - ITEM "2|Libri bollati della ditta" - MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID - ITEM "3|Libri unici dello studio" - MESSAGE SHOW,2@|HIDE,1@|RESET,1@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID - ITEM "4|Libri con riferimenti al libro giornale" - MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID -END - -NUMBER ANNO 4 -BEGIN - PROMPT 2 3 "Anno " - HELP "Anno di cui si vuole stampare il registro" - FLAGS "A" - WARNING "Inserire l'anno" - VALIDATE FIXLEN_FUNC 4 - CHECKTYPE REQUIRED -END - -GROUPBOX DLG_NULL 39 5 -BEGIN - PROMPT 16 2 "Scelta ditte" -END - -NUMBER DA_CODICE 5 -BEGIN - PROMPT 17 3 "Da codice " - HELP "Codice ditta di inizio selezione" -END - -BUTTON BUT_DFR 2 1 -BEGIN - PROMPT 33 3 "*" - PICTURE 109 -END - -NUMBER A_CODICE 5 -BEGIN - PROMPT 17 4 "A codice " - HELP "Codice ditta di fine selezione" -END - -BUTTON BUT_DTO 2 1 -BEGIN - PROMPT 33 4 "*" - PICTURE 109 -END - -STRING F_SELECT 5 -BEGIN - PROMPT 17 5 "Scelte n. " - FLAGS "DR" -END - -BUTTON DLG_SELECT 10 2 -BEGIN - PROMPT 41 3 "~Selezione" - HELP "Indicare le ditte da selezionare per la stampa" -END - -BUTTON F_ANNULLA 10 -BEGIN - PROMPT 41 5 "A~zzera" - HELP "Annullare la selezione delle ditte" - MESSAGE RESET,DA_CODICE|RESET,A_CODICE -END - -DATE DATA_STAMPA -BEGIN - PROMPT 28 7 "Data stampa " - FLAGS "A" - CHECKTYPE REQUIRED - WARNING "Inserire la data di stampa" -END - -STRING CODICE_LIBRO 3 -BEGIN - PROMPT 2 7 "Codice libro " - HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" - USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO CODTAB[5,7] - FLAGS "U" - VALIDATE ZEROFILL_FUNC 3 - GROUP 1 -END - -STRING CODICE_LIBRO_PROVA 3 -BEGIN - PROMPT 2 7 "Codice libro " - HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" - USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO_PROVA - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7] - FLAGS "U" - VALIDATE ZEROFILL_FUNC 3 -END - -STRING CODICE_LIB_UN 3 -BEGIN - PROMPT 2 7 "Libro unico " - HELP "Codice del libro unico su cui deve essere effettuata la stampa" - USE %LBU SELECT CODTAB[1,4]==#111 - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIB_UN - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIB_UN CODTAB[5,7] - FLAGS "U" - CHECKTYPE REQUIRED - WARNING "Inserire il codice del libro unico" - VALIDATE ZEROFILL_FUNC 3 - GROUP 2 -END - -GROUPBOX DLG_NULL 52 3 -BEGIN - PROMPT 2 8 "Stampa movimenti" -END - -DATE DA_DATA -BEGIN - PROMPT 3 9 "Dalla data " - HELP "Data di inizio stampa registro" - GROUP 3 -END - -DATE A_DATA -BEGIN - PROMPT 30 9 "Alla data " - HELP "Data di fine stampa registro" - VALIDATE DATE_CMP_FUNC >= DA_DATA - WARNING "Inserire una data non inferiore alla data limite inferiore" - GROUP 3 -END - -LISTBOX FINO_A_MESE 10 -BEGIN - PROMPT 3 9 "Fino al mese " - HELP "Mese fino al quale eseguire la stampa" - FLAGS "M" - GROUP 1 -END - -LISTBOX MESE 10 -BEGIN - PROMPT 4 9 "Mese " - HELP "Mese di cui eseguire la stampa" - FLAGS "M" - GROUP 2 -END - -LISTBOX TIPO_RIEPILOGATIVO 11 -BEGIN - PROMPT 2 11 "Tipo riepilogativo " - HELP "Indicare il tipo stampa di liquidazione sul registro" - ITEM "P|Del periodo" - ITEM "A|Annuale" -END - -GROUPBOX DLG_NULL 35 4 -BEGIN - PROMPT 2 12 "Formato pagina" -END - -LISTBOX STAMPA_WIDTH 4 -BEGIN - PROMPT 3 13 "Numero di colonne " - HELP "Numero di colonne per pagina del modulo di stampa." - ITEM "1|132" - ITEM "2|198" -END - -NUMBER STAMPA_LEN 3 -BEGIN - PROMPT 3 14 "Numero di righe " - HELP "Numero di righe per pagina del modulo di stampa. Se non specificato assume 66 righe" -END - -BUTTON DLG_PRINT 10 2 -BEGIN - PROMPT -12 -1 "~Stampa" - MESSAGE EXIT,K_ENTER -END - -BUTTON DLG_QUIT 10 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -PAGE "Stampa registri IVA" -1 -1 56 18 - -NUMBER ULTIMA_PAGINA 4 -BEGIN - PROMPT 2 2 "Ultimo numero di pagina stampata libro unico " - HELP "Numero dell'ultima pagina del libro unico stampata" - FLAGS "R" - GROUP 2 -END - -STRING CODICE_LIBRO_IVA 3 -BEGIN - PROMPT 2 3 "Eventuale codice libro IVA " - HELP "Libro IVA da stampare. Vuoto = tutti" - USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO_IVA - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO_IVA CODTAB[5,7] - //CHECKTYPE NORMAL - FLAGS "U" - VALIDATE ZEROFILL_FUNC 3 - GROUP 2 -END - -LISTBOX ULTIMO_MESE 10 -BEGIN - PROMPT 2 4 "Ultimo mese stampa su libro unico " - FLAGS "MD" - ITEM "00|Nessuno" - GROUP 2 -END - -BOOLEAN RIF_VID -BEGIN - PROMPT 2 5 "Stampa riferimenti vidimazione" -END - -BUTTON DLG_PRINT 10 2 -BEGIN - PROMPT -12 -1 "~Stampa" - MESSAGE EXIT,K_ENTER -END - -BUTTON DLG_QUIT 10 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK - +// cg4400a.uml +// Stampa tabella registri + +#include "cg4400a.h" + +PAGE "Stampa registri IVA" -1 -1 56 18 + +LISTBOX TIPO_STAMPA 1 48 +BEGIN + PROMPT 2 1 "Tipo " + HELP "Indicare il tipo di stampa da eseguire" + ITEM "1|Stampa di prova" + MESSAGE SHOW,3@|SHOW,CODICE_LIBRO_PROVA|SHOW,DATA_STAMPA|SHOW,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID|HIDE,1@|RESET,1@|HIDE,2@|RESET,2@ + ITEM "2|Libri bollati della ditta" + MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID + ITEM "3|Libri unici dello studio" + MESSAGE SHOW,2@|HIDE,1@|RESET,1@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID + ITEM "4|Libri con riferimenti al libro giornale" + MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,TIPO_RIEPILOGATIVO|RESET,TIPO_RIEPILOGATIVO|HIDE,RIF_VID|RESET,RIF_VID +END + +NUMBER ANNO 4 +BEGIN + PROMPT 2 3 "Anno " + HELP "Anno di cui si vuole stampare il registro" + FLAGS "A" + WARNING "Inserire l'anno" + VALIDATE FIXLEN_FUNC 4 + CHECKTYPE REQUIRED +END + +GROUPBOX DLG_NULL 39 5 +BEGIN + PROMPT 16 2 "Scelta ditte" +END + +NUMBER DA_CODICE 5 +BEGIN + PROMPT 17 3 "Da codice " + HELP "Codice ditta di inizio selezione" +END + +BUTTON BUT_DFR 2 1 +BEGIN + PROMPT 33 3 "*" + PICTURE 109 +END + +NUMBER A_CODICE 5 +BEGIN + PROMPT 17 4 "A codice " + HELP "Codice ditta di fine selezione" +END + +BUTTON BUT_DTO 2 1 +BEGIN + PROMPT 33 4 "*" + PICTURE 109 +END + +STRING F_SELECT 5 +BEGIN + PROMPT 17 5 "Scelte n. " + FLAGS "DR" +END + +BUTTON DLG_SELECT 10 2 +BEGIN + PROMPT 41 3 "~Selezione" + HELP "Indicare le ditte da selezionare per la stampa" +END + +BUTTON F_ANNULLA 10 +BEGIN + PROMPT 41 5 "A~zzera" + HELP "Annullare la selezione delle ditte" + MESSAGE RESET,DA_CODICE|RESET,A_CODICE +END + +DATE DATA_STAMPA +BEGIN + PROMPT 28 7 "Data stampa " + FLAGS "A" + CHECKTYPE REQUIRED + WARNING "Inserire la data di stampa" +END + +STRING CODICE_LIBRO 3 +BEGIN + PROMPT 2 7 "Codice libro " + HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" + USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO CODTAB[5,7] + FLAGS "U" + VALIDATE ZEROFILL_FUNC 3 + GROUP 1 +END + +STRING CODICE_LIBRO_PROVA 3 +BEGIN + PROMPT 2 7 "Codice libro " + HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" + USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO_PROVA + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7] + FLAGS "U" + VALIDATE ZEROFILL_FUNC 3 +END + +STRING CODICE_LIB_UN 3 +BEGIN + PROMPT 2 7 "Libro unico " + HELP "Codice del libro unico su cui deve essere effettuata la stampa" + USE %LBU SELECT CODTAB[1,4]==#111 + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIB_UN + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIB_UN CODTAB[5,7] + FLAGS "U" + CHECKTYPE REQUIRED + WARNING "Inserire il codice del libro unico" + VALIDATE ZEROFILL_FUNC 3 + GROUP 2 +END + +GROUPBOX DLG_NULL 52 3 +BEGIN + PROMPT 2 8 "Stampa movimenti" +END + +DATE DA_DATA +BEGIN + PROMPT 3 9 "Dalla data " + HELP "Data di inizio stampa registro" + GROUP 3 +END + +DATE A_DATA +BEGIN + PROMPT 30 9 "Alla data " + HELP "Data di fine stampa registro" + VALIDATE DATE_CMP_FUNC >= DA_DATA + WARNING "Inserire una data non inferiore alla data limite inferiore" + GROUP 3 +END + +LISTBOX FINO_A_MESE 10 +BEGIN + PROMPT 3 9 "Fino al mese " + HELP "Mese fino al quale eseguire la stampa" + FLAGS "M" + GROUP 1 +END + +LISTBOX MESE 10 +BEGIN + PROMPT 4 9 "Mese " + HELP "Mese di cui eseguire la stampa" + FLAGS "M" + GROUP 2 +END + +LISTBOX TIPO_RIEPILOGATIVO 11 +BEGIN + PROMPT 2 11 "Tipo riepilogativo " + HELP "Indicare il tipo stampa di liquidazione sul registro" + ITEM "P|Del periodo" + ITEM "A|Annuale" +END + +GROUPBOX DLG_NULL 35 4 +BEGIN + PROMPT 2 12 "Formato pagina" +END + +LISTBOX STAMPA_WIDTH 4 +BEGIN + PROMPT 3 13 "Numero di colonne " + HELP "Numero di colonne per pagina del modulo di stampa." + ITEM "1|132" + ITEM "2|198" +END + +NUMBER STAMPA_LEN 3 +BEGIN + PROMPT 3 14 "Numero di righe " + HELP "Numero di righe per pagina del modulo di stampa. Se non specificato assume 66 righe" +END + +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT -12 -1 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Stampa registri IVA" -1 -1 56 18 + +NUMBER ULTIMA_PAGINA 4 +BEGIN + PROMPT 2 2 "Ultimo numero di pagina stampata libro unico " + HELP "Numero dell'ultima pagina del libro unico stampata" + FLAGS "R" + GROUP 2 +END + +STRING CODICE_LIBRO_IVA 3 +BEGIN + PROMPT 2 3 "Eventuale codice libro IVA " + HELP "Libro IVA da stampare. Vuoto = tutti" + USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO_IVA + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO_IVA CODTAB[5,7] + //CHECKTYPE NORMAL + FLAGS "U" + VALIDATE ZEROFILL_FUNC 3 + GROUP 2 +END + +LISTBOX ULTIMO_MESE 10 +BEGIN + PROMPT 2 4 "Ultimo mese stampa su libro unico " + FLAGS "MD" + ITEM "00|Nessuno" + GROUP 2 +END + +BOOLEAN RIF_VID +BEGIN + PROMPT 2 5 "Stampa riferimenti vidimazione" +END + +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT -12 -1 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK + diff --git a/cg/classpim.cpp b/cg/classpim.cpp index a8c80b63b..bdc656ae4 100755 --- a/cg/classpim.cpp +++ b/cg/classpim.cpp @@ -1,232 +1,232 @@ -// classpim.cpp -// funzione per classificare i PIM e sommare tutto cio' che contengono -#include "classpim.h" -#include - -bool classify_pim(TRectype& pimr, real& imp, real& iva, tiporec& t) -{ - static int last_checked = -1; - - // parse CODTAB of pim record - TString ctab = pimr.get("CODTAB"); - - const int tipocr = atoi(ctab.mid(15,1)); // tipo costo_ricavo - const int tipodet = atoi(ctab.mid(20,1)); // tipo detraibilita' - const int corrisp = (int)pimr.get_long("I0"); // netto = 1, lordo = 2 - const int tipomov = (int)pimr.get_long("I1"); // 1 = vendita, 2 = acquisto - - const bool vola = pimr.get_bool("B2"); - const bool rimb = pimr.get_bool("B3"); - const bool ricl = pimr.get_bool("B4"); - - TString tipoiva = pimr.get("S5"); - - // cominciamo cosi' - imp = ZERO; iva = ZERO; - - for (int i = last_checked + 1; i <= MAX_TIPOREC; i++) - { - tiporec tocheck = (tiporec)i; - bool found = FALSE; - - switch(tocheck) - { - case acq_norm: - //found = tipomov == 2 && tipoiva != "NS"; - found = tipomov == 2; - found &= (tipodet == 0 /* || tipodet == 1 || tipodet == 3 || - tipodet == 5 || tipodet == 9 */); - if (found) - { - imp = pimr.get_real("R0") - pimr.get_real("R9"); - iva = pimr.get_real("R1") - pimr.get_real("R10"); - } - break; - case vend_norm: - //found = tipomov == 1 /* && corrisp == 1 */ && tipoiva != "NS"; - found = tipomov == 1 /* && corrisp == 1 */; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - } - break; - case acq_simp: - if (tipomov == 2) - { - imp = pimr.get_real("R11"); - iva = pimr.get_real("R12"); - } - found = !imp.is_zero() || !iva.is_zero(); - break; - case vend_simp: - if (tipomov == 1 /* && corrisp == 1 */) - { - imp = pimr.get_real("R11"); - iva = pimr.get_real("R12"); - } - found = !imp.is_zero() || !iva.is_zero(); - break; - case bolle_doganali: - //if (tipomov == 2 && tipoiva != "NS") - if (tipomov == 2) - { - imp = pimr.get_real("R9"); - iva = pimr.get_real("R10"); - } - found = !imp.is_zero() || !iva.is_zero(); - break; - case base_ventilazione: - found = (tipomov == 2 && tipodet != 9 && tipocr == 1); - found &= (tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES"); - found &= (ricl ? TRUE : tipodet == 3); - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - } - found &= !imp.is_zero() || !iva.is_zero(); - break; - case acq_beni_riv: - /* - found = (tipomov == 2 && tipodet != 9 && - (tipocr == 1 || (tipocr == 5 && tipodet == 3))); - found &= tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES"; - found &= (ricl ? TRUE : tipodet == 3); - */ - found = (tipomov == 2 && (tipocr == 1 || tipocr == 5)); - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - } - found &= (!imp.is_zero() || !iva.is_zero()); - break; - case corr_norm: - found = tipomov == 1 && corrisp == 2 && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case corr_simp: - if (tipomov == 1 && corrisp == 2) - { - imp = pimr.get_real("R11"); - iva = pimr.get_real("R12"); - } - found = !imp.is_zero() || !iva.is_zero(); - break; - case acq_beni_ammort: - //found = tipomov == 2 && tipocr == 2 && - // tipodet == 0 && tipoiva != "NS"; - found = tipomov == 2 && tipocr == 2 && tipodet == 0; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_beni_ammort_nd: - //found = tipomov == 2 && tipocr ==2 && - // tipodet != 0 && tipoiva != "NS"; - found = tipomov == 2 && tipocr ==2 && tipodet != 0; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_beni_leasing: - //found = tipomov == 2 && tipocr == 8 && tipoiva != "NS"; - found = tipomov == 2 && tipocr == 8; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_amm_ultdetr: - //found = tipomov == 2 && tipocr == 3 && tipoiva != "NS"; - found = tipomov == 2 && tipocr == 3; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_ind_op_es: - found = tipomov == 2 && tipodet == 1 && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_ind_pass_int: - found = tipomov == 2 && tipodet == 3 && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_ind_art_19: - found = tipomov == 2 && tipodet == 9 && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case cess_amm: - //found = tipomov == 1 && tipocr == 4 && tipoiva != "NS"; - found = tipomov == 1 && tipocr == 4; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case vend_rimborso: - found = tipomov == 1 && rimb && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - case acq_rimborso: - found = tipomov == 2 && rimb && tipoiva != "NS"; - if (found) - { - imp = pimr.get_real("R0"); - iva = pimr.get_real("R1"); - found &= (!imp.is_zero() || !iva.is_zero()); - } - break; - } - - if (i == MAX_TIPOREC) - last_checked = -1; - else if (found) - { - t = tocheck; - last_checked = i; - break; - } - } - - return last_checked != -1; -} +// classpim.cpp +// funzione per classificare i PIM e sommare tutto cio' che contengono +#include "classpim.h" +#include + +bool classify_pim(TRectype& pimr, real& imp, real& iva, tiporec& t) +{ + static int last_checked = -1; + + // parse CODTAB of pim record + TString ctab = pimr.get("CODTAB"); + + const int tipocr = atoi(ctab.mid(15,1)); // tipo costo_ricavo + const int tipodet = atoi(ctab.mid(20,1)); // tipo detraibilita' + const int corrisp = (int)pimr.get_long("I0"); // netto = 1, lordo = 2 + const int tipomov = (int)pimr.get_long("I1"); // 1 = vendita, 2 = acquisto + + const bool vola = pimr.get_bool("B2"); + const bool rimb = pimr.get_bool("B3"); + const bool ricl = pimr.get_bool("B4"); + + TString tipoiva = pimr.get("S5"); + + // cominciamo cosi' + imp = ZERO; iva = ZERO; + + for (int i = last_checked + 1; i <= MAX_TIPOREC; i++) + { + tiporec tocheck = (tiporec)i; + bool found = FALSE; + + switch(tocheck) + { + case acq_norm: + //found = tipomov == 2 && tipoiva != "NS"; + found = tipomov == 2; + found &= (tipodet == 0 /* || tipodet == 1 || tipodet == 3 || + tipodet == 5 || tipodet == 9 */); + if (found) + { + imp = pimr.get_real("R0") - pimr.get_real("R9"); + iva = pimr.get_real("R1") - pimr.get_real("R10"); + } + break; + case vend_norm: + //found = tipomov == 1 /* && corrisp == 1 */ && tipoiva != "NS"; + found = tipomov == 1 /* && corrisp == 1 */; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + } + break; + case acq_simp: + if (tipomov == 2) + { + imp = pimr.get_real("R11"); + iva = pimr.get_real("R12"); + } + found = !imp.is_zero() || !iva.is_zero(); + break; + case vend_simp: + if (tipomov == 1 /* && corrisp == 1 */) + { + imp = pimr.get_real("R11"); + iva = pimr.get_real("R12"); + } + found = !imp.is_zero() || !iva.is_zero(); + break; + case bolle_doganali: + //if (tipomov == 2 && tipoiva != "NS") + if (tipomov == 2) + { + imp = pimr.get_real("R9"); + iva = pimr.get_real("R10"); + } + found = !imp.is_zero() || !iva.is_zero(); + break; + case base_ventilazione: + found = (tipomov == 2 && tipodet != 9 && tipocr == 1); + found &= (tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES"); + found &= (ricl ? TRUE : tipodet == 3); + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + } + found &= !imp.is_zero() || !iva.is_zero(); + break; + case acq_beni_riv: + /* + found = (tipomov == 2 && tipodet != 9 && + (tipocr == 1 || (tipocr == 5 && tipodet == 3))); + found &= tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES"; + found &= (ricl ? TRUE : tipodet == 3); + */ + found = (tipomov == 2 && (tipocr == 1 || tipocr == 5)); + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + } + found &= (!imp.is_zero() || !iva.is_zero()); + break; + case corr_norm: + found = tipomov == 1 && corrisp == 2 && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case corr_simp: + if (tipomov == 1 && corrisp == 2) + { + imp = pimr.get_real("R11"); + iva = pimr.get_real("R12"); + } + found = !imp.is_zero() || !iva.is_zero(); + break; + case acq_beni_ammort: + //found = tipomov == 2 && tipocr == 2 && + // tipodet == 0 && tipoiva != "NS"; + found = tipomov == 2 && tipocr == 2 && tipodet == 0; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_beni_ammort_nd: + //found = tipomov == 2 && tipocr ==2 && + // tipodet != 0 && tipoiva != "NS"; + found = tipomov == 2 && tipocr ==2 && tipodet != 0; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_beni_leasing: + //found = tipomov == 2 && tipocr == 8 && tipoiva != "NS"; + found = tipomov == 2 && tipocr == 8; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_amm_ultdetr: + //found = tipomov == 2 && tipocr == 3 && tipoiva != "NS"; + found = tipomov == 2 && tipocr == 3; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_ind_op_es: + found = tipomov == 2 && tipodet == 1 && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_ind_pass_int: + found = tipomov == 2 && tipodet == 3 && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_ind_art_19: + found = tipomov == 2 && tipodet == 9 && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case cess_amm: + //found = tipomov == 1 && tipocr == 4 && tipoiva != "NS"; + found = tipomov == 1 && tipocr == 4; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case vend_rimborso: + found = tipomov == 1 && rimb && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + case acq_rimborso: + found = tipomov == 2 && rimb && tipoiva != "NS"; + if (found) + { + imp = pimr.get_real("R0"); + iva = pimr.get_real("R1"); + found &= (!imp.is_zero() || !iva.is_zero()); + } + break; + } + + if (i == MAX_TIPOREC) + last_checked = -1; + else if (found) + { + t = tocheck; + last_checked = i; + break; + } + } + + return last_checked != -1; +}