From 56c30da2366c856086815ea4efadc1e965ea8a1a Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 15 Mar 2013 11:08:44 +0000 Subject: [PATCH] Gestione descrizione IVA cee in stampa fatture Correzioni varie a lettere d'intento git-svn-id: svn://10.65.10.50/branches/R_10_00@22830 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/clifor.cpp | 25 ++++++++---------- ve/ve0100n.uml | 4 +-- ve/ve1300.cpp | 1 + ve/ve2400.cpp | 4 ++- ve/ve2400.h | 2 +- ve/ve2400.uml | 2 ++ ve/ve2500ax.uml | 9 ------- ve/velib03.cpp | 70 ++++++++++++++++++++++++++----------------------- ve/velib04a.cpp | 57 ++++++++++++++++++++++------------------ ve/velib04b.cpp | 4 +-- ve/velib05.cpp | 67 ++++++++++++++++++++++++++++++++++++++-------- ve/velib05.h | 9 ++++--- ve/velib06.cpp | 2 +- ve/velib06a.cpp | 4 +-- 14 files changed, 155 insertions(+), 105 deletions(-) diff --git a/ve/clifor.cpp b/ve/clifor.cpp index c11fc2c40..58d31a27c 100755 --- a/ve/clifor.cpp +++ b/ve/clifor.cpp @@ -65,27 +65,24 @@ TRectype& TCli_for::vendite() const return (TRectype &) _ven_rec; } -bool TCli_for::read_lettera(const TDate & data, bool extended) +bool TCli_for::read_lettera(const TDate& data, bool extended) { - - if (_use_lettere) + if (use_lettere()) { - if (data != _last_data || _extended != extended) + if (data != _last_data || _extended != extended) { _letint.zero(); - TRelation * r = new TRelation(LF_LETINT); - TRectype to(r->curr()); - - to.put(LETINT_ANNO, data.year()); + TRelation r(LF_LETINT); + + TRectype to(r.curr()); to.put(LETINT_CODCLI, codice()); + to.put(LETINT_ANNO, data.year()); TRectype from(to); - from.put(LETINT_ANNO, data.year() - 1); - TCursor c(r, "", 2 ,&from, &to); - const int items = c.items(); - + TCursor c(&r, "", 2, &from, &to); + const int items = c.items(); if (items > 0) { TDate dal; @@ -97,7 +94,7 @@ bool TCli_for::read_lettera(const TDate & data, bool extended) const int tipo = c.curr().get_int(LETINT_TIPOOP); - if (tipo == 3) + if (tipo == 3) // Nel periodo { dal = c.curr().get_date(LETINT_DAL); al = c.curr().get_date(LETINT_AL); @@ -163,7 +160,7 @@ int TCli_for::remove(TBaseisamfile& f) const const int err = vendite().remove(v); if (err != NOERR && err != _iskeynotfound) return err; - return TMultiple_rectype:: remove(f); + return TMultiple_rectype::remove(f); } void TCli_for::init() diff --git a/ve/ve0100n.uml b/ve/ve0100n.uml index d4b82dad2..4eb5d4d67 100755 --- a/ve/ve0100n.uml +++ b/ve/ve0100n.uml @@ -19,7 +19,7 @@ END ENDPAGE -TOOLBAR "botbar" 0 -2 0 2 +TOOLBAR "botbar" 0 0 0 2 BUTTON DLG_SAVEREC 10 2 BEGIN @@ -78,4 +78,4 @@ END ENDPAGE -ENDMASK \ No newline at end of file +ENDMASK diff --git a/ve/ve1300.cpp b/ve/ve1300.cpp index cb41dbc59..be68a0781 100755 --- a/ve/ve1300.cpp +++ b/ve/ve1300.cpp @@ -200,6 +200,7 @@ TDoc_recordset::TDoc_recordset(const TRecordset& doc, const TString& old_query) rows.sort(compare_rdocs); } _doc->set_riga_conai(); + _doc->set_riga_tic(); // Posiziona correttamente anche il cursore principale *cursor() = 0L; diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index 92d0872a1..10ae5242b 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -378,10 +378,12 @@ void TMask_anamag::set_parametered_fields() enable_page(PAGE_GIACENZE,gestmag); enable_page(PAGE_STORICO,gestmag); + /* Obsoleto // abilita la visualizzazione dei campi per la vendita al dettaglio const bool dettaglio = app().has_module(VDAUT); - show(-G_VD, dettaglio); + */ + // abilita la visualizzazione dei campi distinti per i livelli articolo set_handler(F_CODART, handle_codice); } diff --git a/ve/ve2400.h b/ve/ve2400.h index f549cd288..c39fc633e 100755 --- a/ve/ve2400.h +++ b/ve/ve2400.h @@ -229,7 +229,7 @@ #define G_CATVEN 6 #define G_CONVEN 7 #define G_RAGGFISC 8 -#define G_VD 9 +// #define G_VD 9 Vendite al dettaglio Obsolete #define G_LV 10 // definizioni per l'archivio di misura articoli diff --git a/ve/ve2400.uml b/ve/ve2400.uml index bb8ed70c6..3a2d1e073 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -257,6 +257,7 @@ BEGIN CHECKTYPE NORMAL END +/* STRING F_REPARTO 3 BEGIN PROMPT 1 6 "Reparto " @@ -313,6 +314,7 @@ BEGIN CHECKTYPE NORMAL GROUP G_VD END +*/ STRING F_CATCONV 3 BEGIN diff --git a/ve/ve2500ax.uml b/ve/ve2500ax.uml index cdcee8962..aa480b518 100755 --- a/ve/ve2500ax.uml +++ b/ve/ve2500ax.uml @@ -207,7 +207,6 @@ BEGIN DISPLAY "Descrizione@50" S0 DISPLAY "Cambio" S4 OUTPUT FA_CODVAL CODTAB - OUTPUT FA_CONTROEURO B1 OUTPUT FA_CAMBIO S4 CHECKTYPE NORMAL MESSAGE EMPTY CLEAR,FA_CAMBIO|CLEAR,FA_DATACAM|DISABLE,FA_DATACAM @@ -220,14 +219,6 @@ BEGIN FIELD CAMBIO END -/* -BOOLEAN FA_CONTROEURO -BEGIN - PROMPT 42 1 "Contro Euro" - FIELD CONTROEURO -END -*/ - DATA FA_DATACAM BEGIN PROMPT 61 1 "Data " diff --git a/ve/velib03.cpp b/ve/velib03.cpp index fc0e995e2..fb0c3241f 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -403,7 +403,7 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const if (t == _lordo || t == _imposta) { TString4 codiva_es; iva_esente(codiva_es); - const real iva_spese(TRiga_documento::iva(codiva_es.full() ? (const TString &)codiva_es : codiva_spese()).imposta(imp_spese, ndec)); + const real iva_spese = TRiga_documento::iva(codiva_es.full() ? (const TString&)codiva_es : codiva_spese()).imposta(imp_spese, ndec); if (t == _lordo) imp_spese += iva_spese; else @@ -432,7 +432,7 @@ void TDocumento::iva_esente(TString& codiva_es) const for (int r = 1; codiva_es.empty() && r <= rows; r++) { const TRiga_documento& riga = ((TDocumento*)this)->row(r); - const TString4 str_codiva(riga.get(RDOC_CODIVA)); + const TString4 str_codiva = riga.get(RDOC_CODIVA); if (str_codiva.full()) { @@ -868,7 +868,7 @@ void TDocumento::set_riga_sconto() { _tipo_riga_sc = "08"; conf.set("TRSCONTI", _tipo_riga_sc); - warning_box(FR("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s"), (const char*) _tipo_riga_sc); + warning_box(FR("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione userà automaticamente il tipo %s"), (const char*) _tipo_riga_sc); } } _sconto = new TRiga_documento(this, _tipo_riga_sc); @@ -883,18 +883,18 @@ void TDocumento::update_esenzione() if (clifor().use_lettere()) { bool to_update = false; - const TString8 codiva = codesiva(); + const TString4 codiva = codesiva(); for (int i = physical_rows(); !to_update && i > 0; i--) { const TString & cod = row(i).get(RDOC_CODIVA); - to_update = cod.full() && cod != codiva; } + if (to_update) - for (int i = physical_rows(); i > 0; i--) + for (int i = physical_rows(); i > 0; i--) { TRiga_documento & rdoc = row(i); - const TString & cod = rdoc.get(RDOC_CODIVA); + const TString& cod = rdoc.get(RDOC_CODIVA); if (cod.full()) { @@ -902,41 +902,37 @@ void TDocumento::update_esenzione() rdoc.put(RDOC_CODIVA, codiva); else { - TCodiceIVA i(cod); + const TCodiceIVA i(cod); const bool plafond = i.get_int("S3") > 0; if (plafond) { - TString codivarow; + TString4 codivarow; if (rdoc.is_merce()) codivarow =cached_article(rdoc.get(RDOC_CODARTMAG)).get(ANAMAG_CODIVA); else if (rdoc.is_spese()) { - TSpesa_prest s(rdoc.get(RDOC_CODART)); - + const TSpesa_prest s(rdoc.get(RDOC_CODART)); codivarow = s.cod_iva(); } else if (rdoc.is_prestazione()) { - TSpesa_prest p(rdoc.get(RDOC_CODART), 'P'); - + TSpesa_prest p(rdoc.get(RDOC_CODART), 'P'); codivarow = p.cod_iva(); } else if (rdoc.is_risorsa()) { - TSpesa_prest r(rdoc.get(RDOC_CODART), 'R'); - + TSpesa_prest r(rdoc.get(RDOC_CODART), 'R'); codivarow = r.cod_iva(); } else if (rdoc.is_attrezzatura()) { - TSpesa_prest a(rdoc.get(RDOC_CODART), 'A'); - + TSpesa_prest a(rdoc.get(RDOC_CODART), 'A'); codivarow = a.cod_iva(); } if (codivarow.full()) @@ -965,16 +961,18 @@ void TDocumento::set_riga_esenzione() if (esente) { esente = false; - const TString8 codiva = codes.codice(); + const TString4 codiva = codes.codice(); for (int i = physical_rows(); !esente && i > 0; i--) esente = row(i).get(RDOC_CODIVA) == codiva; } if (!esente) { - if(_esenzione != NULL) + if (_esenzione != NULL) + { delete _esenzione; - _esenzione = NULL; + _esenzione = NULL; + } } else { @@ -2181,7 +2179,6 @@ void TDocumento::update_tabella_iva(bool solo_imponibili) const bool fatt_comm = tipo().fattura_commerciale(); TString4 codiva_es; - iva_esente(codiva_es); for (int i = items; i > 0; i--) { @@ -2293,7 +2290,7 @@ void TDocumento::update_tabella_iva(bool solo_imponibili) if (!val.is_zero()) { - const TString& codiva = codiva_es.full() ? (const TString &) codiva_es : codiva_spese(); + const TString& codiva = codiva_es.full() ? (const TString&)codiva_es : codiva_spese(); TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva); if (ri == NULL && codiva.full()) { @@ -2732,7 +2729,7 @@ void TDocumento::update_raee() r1.put(RDOC_UMQTA, um); if (cod_iva_cli.blank()) { - const TString & codiva = sp.cod_iva(); + const TString& codiva = sp.cod_iva(); if (codiva.full()) r1.put(RDOC_CODIVA, codiva); } @@ -2941,7 +2938,7 @@ void TDocumento::update_conai() // Genera nuove righe if (cli_add_conai) { - const TString4 cod_iva_cli = codesiva() ; + const TString4 cod_iva_cli = codesiva(); TSpesa_prest sp; FOR_EACH_CONFIGURED_CONAI_CLASS(ct) if (!updated[ct]) @@ -2961,7 +2958,7 @@ void TDocumento::update_conai() const TString& s = conai_sp.row(ct); if (sp.read(s) != NOERR) - message_box(FR("Il codice spesa CONAI %s specificato nei parametri ditta e' assente: '%s'"), + message_box(FR("Il codice spesa CONAI %s specificato nei parametri ditta è assente: '%s'"), conai_material(ct), (const char*)s); else { @@ -3106,17 +3103,24 @@ int TDocumento::tipo_riclassificato() const const TString& TDocumento::codesiva() const { TCli_for& c = clifor(); - const TString4 codiva(c.vendite().get(CFV_ASSFIS)); - TCodiceIVA i(codiva); - const bool plafond = i.get_int("S3") > 0; + + const TString& codiva = c.vendite().get(CFV_ASSFIS); + if (!c.use_lettere()) + return codiva; + + const TCodiceIVA i(codiva); + if (!i.has_plafond()) // Era presente nella 3.x, poi è sparito nella 10, ora torna nella 11.0 (7-3-2013) + return codiva; - if (!c.use_lettere() || c.read_lettera(get_date(DOC_DATADOC))) - return c.vendite().get(CFV_ASSFIS); - return EMPTY_STRING; + const TDate datadoc = get(DOC_DATADOC); + if (c.read_lettera(datadoc)) + return c.vendite().get(CFV_ASSFIS); // codiva may be lost + + return EMPTY_STRING; } -void TDocumento::get_protocolli_esenzione(TString & esenzione, TString & data_esenzione, - TString & registrazione, TString & data_registrazione) const +void TDocumento::get_protocolli_esenzione(TString& esenzione, TString& data_esenzione, + TString& registrazione, TString& data_registrazione) const { TCli_for& c = clifor(); if (c.use_lettere()) diff --git a/ve/velib04a.cpp b/ve/velib04a.cpp index dfb835ea2..33162a1c8 100755 --- a/ve/velib04a.cpp +++ b/ve/velib04a.cpp @@ -23,7 +23,7 @@ TFatturazione_bolle::TFatturazione_bolle(const char* cod) TFatturazione_bolle::TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { - TString cod(rec.get("CODTAB")); + const TString8 cod = rec.get("CODTAB"); TString80 name; name.format("AGGFLD(%s)", cod); _lista_campi = ini_get_string(CONFIG_DITTA, "ve", name); @@ -383,38 +383,45 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do TToken_string s("", '='); for (s = _lista_campi.get(0); s.full(); s = _lista_campi.get()) { - TString16 oname(s.get()); + const TString16 oname(s.get()); TString16 iname(s.get()); if (oname == RDOC_CODIVA) { const int rows = campione.physical_rows(); - const TString8 codesiva = campione.codesiva(); + const TString4 codesiva = campione.codesiva(); - FOR_EACH_PHYSICAL_RDOC(campione, i, rdoc) - { - if (codesiva.full()) - rdoc->put(RDOC_CODIVA, codesiva); - else - { - if (rdoc->is_articolo()) - { - const TArticolo_giacenza & art = rdoc->articolo(); - const TString8 codiva = art.get(ANAMAG_CODIVA); - if (codiva.full()) - rdoc->put(RDOC_CODIVA, codiva); - } - else - if ((rdoc->is_spese() || rdoc->is_prestazione())) - { - const TSpesa_prest & s = rdoc->spesa(); - const TString8 codiva = s.cod_iva(); + FOR_EACH_PHYSICAL_RDOC(campione, i, rdoc) + { + // Elabora solo righe articolo, spese o prestazioni valide + if (!rdoc->is_descrizione()) + { + if (codesiva.full()) + { + if (rdoc->imponibile().is_zero()) + rdoc->zero(RDOC_CODIVA); + else + rdoc->put(RDOC_CODIVA, codesiva); + } + else + { + if (rdoc->is_articolo()) + { + const TArticolo_giacenza& art = rdoc->articolo(); + const TString& codiva = art.get(ANAMAG_CODIVA); + if (codiva.full()) + rdoc->put(RDOC_CODIVA, codiva); + } else + if ((rdoc->is_spese() || rdoc->is_prestazione())) + { + const TSpesa_prest& s = rdoc->spesa(); + const TString& codiva = s.cod_iva(); if (codiva.full()) rdoc->put(RDOC_CODIVA, codiva); - } - - } - } + } + } + } + } } else { diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index 90a524e73..726328ed6 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -4135,7 +4135,7 @@ void TContabilizzazione::display_error(TDocumento& doc) break; case nr_reg_error: msg.format("Rilevato un numero di registrazione errato contabilizzando il documento %s/%ld." - "Verificare l'integrita' del file movimenti.",(const char*)numerazione,numero); + "Verificare l'integrità del file movimenti.",(const char*)numerazione,numero); break; case nr_doc_error: msg.format("Rilevato un numero di documento errato contabilizzando il documento %s/%ld." @@ -4143,7 +4143,7 @@ void TContabilizzazione::display_error(TDocumento& doc) break; case chg_stat_error: msg.format("Rilevato un errore cambiando lo stato al documento %s/%ld." - "Verificare l'integrita' del file documenti.",(const char*)numerazione,numero); + "Verificare l'integrità del file documenti.",(const char*)numerazione,numero); break; case clifo_error: msg.format("Rilevato un errore caricando le informazioni del Cli/Fo sul documento %s/%ld." diff --git a/ve/velib05.cpp b/ve/velib05.cpp index 58f34c145..e0746a4a7 100755 --- a/ve/velib05.cpp +++ b/ve/velib05.cpp @@ -244,7 +244,7 @@ int TDocumentoEsteso::readat(TBaseisamfile& file, TRecnotype nrec, word lockop) TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec) : TDocumento(rec), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1), - _conai(NULL) + _conai(NULL), _tic(NULL) { // Inizializza i parametri di default @@ -253,25 +253,29 @@ TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec) TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, dec_parm & parm) : TDocumento(rec), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1), - _conai(NULL) + _conai(NULL), _tic(NULL) { _parm = parm; } TDocumentoEsteso::TDocumentoEsteso() : TDocumento(), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1), - _conai(NULL) + _conai(NULL), _tic(NULL) { } TDocumentoEsteso::~TDocumentoEsteso() -{ } - +{ + if (_conai) delete _conai; + if (_tic) delete _tic; +} void TDocumentoEsteso::set_riga_conai() { - if(_conai != NULL) + if (_conai != NULL) + { delete _conai; - _conai = NULL; + _conai = NULL; + } if (rows() > 0) { const bool has_conai = (tipo().add_conai() && clifor().vendite().get_bool(CFV_CONAIASS)); @@ -287,10 +291,51 @@ void TDocumentoEsteso::set_riga_conai() } } -TRiga_documento & TDocumentoEsteso::row(int index) -{ - if (index == TDocumento::rows() + 1) - return * _conai; +void TDocumentoEsteso::set_riga_tic() +{ + if (_tic != NULL) + { + delete _tic; + _tic = NULL; + } + if (get_int(DOC_ANNO) >= 2013 && is_fattura()) + { + FOR_EACH_PHYSICAL_RDOC(*this, r, rdoc) if (!rdoc->is_descrizione()) + { + const TString& cod = rdoc->get(RDOC_CODIVA); + if (cod.full() && !rdoc->imponibile().is_zero()) + { + const TCodiceIVA iva(cod); + TString4 tic; tic.format("%04d", iva.get_int("I1")); + if (tic != "0000") + { + _tic = new TRiga_documento(this, "05"); + _tic->put(RDOC_DESCR, cache().get("%TIC", tic, "S0")); + break; + } + } + } + } +} + +int TDocumentoEsteso::rows() const +{ + int n = TDocumento::rows(); + if (_conai) n++; + if (_tic) n++; + return n; +} + +TRiga_documento& TDocumentoEsteso::row(int index) +{ + const int n = TDocumento::rows(); + if (index > n) + { + if (_conai != NULL && _tic != NULL) + return index == n+1 ? *_conai : *_tic; + else + return _conai ? *_conai : *_tic; + } return TDocumento::row(index); } diff --git a/ve/velib05.h b/ve/velib05.h index 4a54e1d71..6923369f2 100755 --- a/ve/velib05.h +++ b/ve/velib05.h @@ -20,7 +20,8 @@ class TDocumentoEsteso : public TDocumento { // Parametri del documento dec_parm _parm; // Parametri per gli arrotondamenti - TRiga_documento * _conai; + TRiga_documento* _conai; + TRiga_documento* _tic; // membri per il calcolo del riepilogo IVA @@ -68,11 +69,11 @@ public: // pertanto i non imponibili avranno selettore 1 e gli esenti selettore 4. // per avere esenti + non soggetti il selettore sara' 20 e cosi' via. real tot_imponibili(byte selector); - virtual int rows() const { return TDocumento::rows() + ((_conai != NULL) ? 1 : 0); } - virtual TRiga_documento & row(int index); + virtual int rows() const; + virtual TRiga_documento& row(int index); void set_riga_conai(); - + void set_riga_tic(); // Funzioni per settare i parametri void set_decimals(dec_parm & parm) { _parm = parm ; } diff --git a/ve/velib06.cpp b/ve/velib06.cpp index e2fd76917..c20948060 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -311,7 +311,7 @@ TDocumento_mask::TDocumento_mask(const char* td) } } - if (main_app().has_module(CUAUT)) + if (main_app().has_module(CTAUT)) { if (_ges_ca && id2pos(F_CUP) > 0) { diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index ea5e27865..5fa285836 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -2777,7 +2777,7 @@ bool codcms_handler(TMask_field& f, KEY key) } } - if (main_app().has_module(CUAUT) && (key == K_TAB && f.focusdirty())) + if (main_app().has_module(CTAUT) && (key == K_TAB && f.focusdirty())) { TToken_string key; static TRecord_cache __cfcm(LF_CFCMS, 4); @@ -3279,7 +3279,7 @@ bool TNar_mask::show_note() const TRecnotype items = cur.items(); if (items > 0) { - close(); + // close(); // Pare un doppione rispetto alla close() precedente cur.freeze(); const TRectype& curr = rel.curr(); TSheet_field& sheet = sfield(N_NOTES);