diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 8cb1b3778..bc70c9a3d 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -1027,8 +1027,8 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc) return false; } #else - _is_pa = true; - _coddest = "WSUHKZ"; + _is_pa = false; + _coddest = "M5ITOJA"; #endif _enapec = _coddest == "0000000" && _pec.full(); _privato = _coddest.len() != 6; @@ -2365,7 +2365,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) pafw300f.set("PW_NUMERO", doc.numero()); pafw300f.set("PW_DATA", doc.data()); - if (!cached_tipodoc(doc.get(DOC_TIPODOC)).invio_xml()) + if (!cached_tipodoc(doc.get(DOC_TIPODOC)).invio_xml() || doc.noinvioxml()) { pafw300f.set("PW_CODSDI", "**********"); } diff --git a/src/include/doc.h b/src/include/doc.h index b29761627..186727c45 100755 --- a/src/include/doc.h +++ b/src/include/doc.h @@ -101,6 +101,7 @@ #define DOC_COMMPREL "COMMPREL" #define DOC_FASEPREL "FASEPREL" #define DOC_TIPODOCSDI "TIPODOCSDI" +#define DOC_NOINVIOXML "NOINVIOXML" // Virtuali diff --git a/src/tp/tp0100.cpp b/src/tp/tp0100.cpp index 70069f602..c84aa9793 100755 --- a/src/tp/tp0100.cpp +++ b/src/tp/tp0100.cpp @@ -291,6 +291,10 @@ long TPack_transfer::get_long(const char* field) const return recordset().get(field).as_int(); } +const real TPack_transfer::get_real(const char* campo) const +{ + return recordset().get(campo).as_real(); +} const TString& TPack_transfer::decode_value(const char* tab, const TString& cod) { if (cod.full()) @@ -482,7 +486,7 @@ void TTrasferimentoPack_mask::trasferisci() pc.set_custrif(get(F_RIF)); pc.set_ordrif(get(F_ORD)); pc.activate_order_date(get_bool(F_ORDDATE)); - pc.activate_conai(ini_get_int(CONFIG_DITTA, "tp", "ConaiScheme", 0)); + pc.activate_conai(get_int(F_SCHEMA)); pc.init(TR("Documenti di trasporto"), query_header, log); go_on = pc.trasferisci(); book.add(log); diff --git a/src/tp/tp0100.h b/src/tp/tp0100.h index 2c81342f3..f112cfba0 100755 --- a/src/tp/tp0100.h +++ b/src/tp/tp0100.h @@ -73,7 +73,9 @@ public: const TString& get_str(const char* campo) const; // Get string from current recordset const TString& get_real_str(const char* campo) const; // Get eventually empty string from numeric field - long get_long(const char* campo) const; + long get_long(const char* campo) const; + const real get_real(const char* campo) const; + bool write_enabled() const { return _write_enabled; } diff --git a/src/tp/tp0100a.h b/src/tp/tp0100a.h index 2082b92ac..f1c2aefb3 100755 --- a/src/tp/tp0100a.h +++ b/src/tp/tp0100a.h @@ -25,5 +25,6 @@ #define F_RIF 218 #define F_ORD 219 #define F_ORDDATE 220 +#define F_SCHEMA 221 #endif diff --git a/src/tp/tp0100a.uml b/src/tp/tp0100a.uml index 7e4183a0f..d6d4f4fde 100755 --- a/src/tp/tp0100a.uml +++ b/src/tp/tp0100a.uml @@ -87,64 +87,71 @@ BEGIN FLAGS "*" END +LISTBOX F_SCHEMA 1 36 +BEGIN + PROMPT 2 6 "Schema CONAI " + ITEM "1|Sottocategoria e peso da bolla" + ITEM "2|Sottocategoria e peso da articolo" +END + GROUPBOX DLG_NULL 78 16 BEGIN - PROMPT 1 6 "@bDocumenti di trasporto" + PROMPT 1 7 "@bDocumenti di trasporto" END BOOLEAN F_CUSTREF BEGIN - PROMPT 2 7 "Inserire riferimenti cliente nelle righe di descrizione" + PROMPT 2 8 "Inserire riferimenti cliente nelle righe di descrizione" END BOOLEAN F_PAPER BEGIN - PROMPT 2 8 "Inserire formato carta nella descrizione aggiuntiva" + PROMPT 2 9 "Inserire formato carta nella descrizione aggiuntiva" END BOOLEAN F_SIZE BEGIN - PROMPT 2 9 "Inserire dimensioni articolo nella descrizione aggiuntiva" + PROMPT 2 10 "Inserire dimensioni articolo nella descrizione aggiuntiva" END BOOLEAN F_REFINFO BEGIN - PROMPT 2 10 "Inserire riferimenti cliente nella descrizione aggiuntiva" + PROMPT 2 11 "Inserire riferimenti cliente nella descrizione aggiuntiva" END BOOLEAN F_CMSREF BEGIN - PROMPT 2 11 "Inserire riferimenti cliente nel campo CODCMS" + PROMPT 2 12 "Inserire riferimenti cliente nel campo CODCMS" END BOOLEAN F_CUSTCODE BEGIN - PROMPT 2 12 "Utilizzare il codice articolo del cliente (Richiede tipo riga 14)" + PROMPT 2 13 "Utilizzare il codice articolo del cliente (Richiede tipo riga 14)" END BOOLEAN F_ORDPAPER BEGIN - PROMPT 2 13 "Descrizione articoli come da eventuale ordine" + PROMPT 2 14 "Descrizione articoli come da eventuale ordine" END BOOLEAN F_DISCOUNT BEGIN - PROMPT 2 14 "Gestione sconti di riga multipli" + PROMPT 2 15 "Gestione sconti di riga multipli" END STRING F_RIF 20 BEGIN - PROMPT 2 16 "Vostro rifermento " + PROMPT 2 17 "Vostro rifermento " END STRING F_ORD 20 BEGIN - PROMPT 2 18 "Riferimento ordine " + PROMPT 2 19 "Riferimento ordine " END BOOLEAN F_ORDDATE BEGIN - PROMPT 2 20 "Data nel riferimento ordine" + PROMPT 2 21 "Data nel riferimento ordine" END diff --git a/src/tp/tp0102.cpp b/src/tp/tp0102.cpp index d2b91499e..ff6c0c291 100755 --- a/src/tp/tp0102.cpp +++ b/src/tp/tp0102.cpp @@ -7,7 +7,7 @@ // Assegna sottocategoria e peso di una classe CONAI solo se non vuoti bool TArticolo_pack::set_conai(const TString& scat, const real& weight) { - const bool ok = scat.full(); // && !weight.is_zero(); + const bool ok = scat.full() && weight != ZERO; if (ok) { @@ -130,36 +130,33 @@ int TCache_art::get_extra_info(const char* key, TArticolo_pack& art) { const TString& sc = envtax.get(0u).as_string(); const real wkg = envtax.get(1).as_real(); - if (art.set_conai(sc, wkg)) - info = 2; + + art.set_conai(sc, wkg); } - if (info == 2) // Ho trovato dati sul CONAI - { - TRecord_array conart(article_code, LF_CONART); - TRectype conrec(LF_CONART); - int r = 1; + TRecord_array conart(article_code, LF_CONART); + TRectype conrec(LF_CONART); + int r = 1; - conart.destroy_rows(); - // Infine salvo i nuovi dati in conart - for (int i = 0; i < FR_CMAX; i++) + conart.destroy_rows(); + // Infine salvo i nuovi dati in conart + for (int i = 0; i < FR_CMAX; i++) + { + const TString4 sotcat = art.conai_subclass(i); + const real peso = art.conai_weight(i); // Faccio i confronti su stringa per evitare decimali impazziti + + if (sotcat.full() && peso != ZERO) { - const TString4 sotcat = art.conai_subclass(i); - const real peso = art.conai_weight(i); // Faccio i confronti su stringa per evitare decimali impazziti - - if (sotcat.full()) - { - conrec.zero(); - conrec.put(CONART_CODART, article_code); - conrec.put(CONART_NRIGA, r++); - conrec.put(CONART_CATEGORIA, sotcat.left(2)); - conrec.put(CONART_SOTTOCAT, sotcat.mid(2)); - conrec.put(CONART_PESO, peso); - conart.add_row(conrec); - } + conrec.zero(); + conrec.put(CONART_CODART, article_code); + conrec.put(CONART_NRIGA, r++); + conrec.put(CONART_CATEGORIA, sotcat.left(2)); + conrec.put(CONART_SOTTOCAT, sotcat.mid(2)); + conrec.put(CONART_PESO, peso); + conart.add_row(conrec); } - conart.write(true); } + conart.write(true); } return info; } @@ -822,110 +819,73 @@ bool TPack_ddt::trasferisci() const TRectype& cfven = cache().get(LF_CFVEN, tok); // Copia tutte le sottocategorie CONAI dall'anagrafica alla riga documento - real peso_imballo_anamag; - real peso_imballo_ddt; - int pesi_anamag = 0; const int conai_scheme = get_conai(); const TString4 conai_subclass = get_str("SubclassCode"); - const TCONAI_class ct = conai_str2class(conai_subclass); + real peso_imballo = get_real("WeightETUnit"); + real peso_imballo_anamag; + TString_array sottocat_anamag; + TArray pesi_anamag; + TGeneric_distrib pesi_bolla(peso_imballo, 3); + + for (int i = 1; i < FR_CMAX; i++) + { + const TString& cs = art.conai_subclass(i - 1); // Codice sottocategoria su ANAMAG + const real& weight = art.conai_weight(i - 1); // Peso imballo su ANAMAG + + if (cs.full() && weight != ZERO) + { + if (cache().get("&VECSS", cs).empty()) + log_message(format(TR("Bolla %ld - Articolo %s - Sottocategoria %s assente"), + ndoc, (const char *)(rowtype == "01" ? codart : custcode), (const char *)cs)); + + sottocat_anamag.add(cs); + pesi_anamag.add(weight); + pesi_bolla.add(weight); + peso_imballo_anamag += weight; + } + } + + if (peso_imballo == ZERO) + peso_imballo = peso_imballo_anamag; - if (cache().get("&VECSS", conai_subclass).empty()) - log_message(format(TR("Bolla %ld - Articolo %s - Sottocategoria %s assente"), - ndoc, (const char *) (rowtype == "01" ? codart : custcode), - (const char *) conai_subclass)); if (conai_scheme == 1) { - // La sottocategoria della bolla prevale su quella anagrafica - int i = 0; - if (conai_subclass.len() == 4) + if (conai_subclass.full() && peso_imballo != ZERO) { + // La sottocategoria della bolla prevale su quella anagrafica schema 1 + if (cache().get("&VESCC", conai_subclass).empty()) + log_message(format(TR("Bolla %ld - Articolo %s - Sottocategoria %s assente"), + ndoc, (const char *)(rowtype == "01" ? codart : custcode), (const char *)conai_subclass)); rdoc.put(conai_sottocat_name(1), conai_subclass); - peso_imballo_ddt = real(get_real_str("WeightETUnit")); - if (peso_imballo_ddt.is_zero()) - peso_imballo_ddt = peso_imballo_anamag; - } - if (conai_subclass.blank()) - { - for (int i = 1; i < FR_CMAX; i++) - { - const TString& cs = art.conai_subclass(i - 1); // Codice sottocategoria su ANAMAG - - if (cache().get("&VECSS", cs).empty()) - log_message(format(TR("Bolla %ld - Articolo %s - Sottocategoria %s assente"), - ndoc, (const char *)(rowtype == "01" ? codart : custcode), - (const char *)cs)); - - if (cs.full()) // la presenza della sottoclasse implica anche un peso positivo - { - const real& weight = art.conai_weight(i - 1); // Peso imballo su ANAMAG - - rdoc.put(conai_sottocat_name(i + 1), cs); - rdoc.put(conai_peso_name(i + 1), weight); // ex QTAGG1 - rdoc.put(conai_esenzione_name(conai_str2class(cs.left(2)), LF_RIGHEDOC), - cfven.get(conai_esenzione_name(conai_str2class(cs.left(2)), LF_CFVEN))); // ex QTAGG2 - peso_imballo_anamag += weight; - pesi_anamag++; - } - } + rdoc.put(conai_peso_name(1), peso_imballo); // ex QTAGG1 } } else { - for (int i = 1; i < FR_CMAX; i++) + // Arrotondo la eventuale differenza di pesi al grammo + real diff = peso_imballo - peso_imballo_anamag; diff.round(3); + // Il peso in bolla e' diverso da quello in anagrafica: devo riproporzionarlo + const bool riproporziona_pesi_da_bolla = (diff != ZERO); + const bool multi_imballo = (pesi_anamag.items() > 1); + + for (int i = 1; i <= sottocat_anamag.items(); i++) { - const TString& cs = art.conai_subclass(i - 1); // Codice sottocategoria su ANAMAG - - if (cs.full()) // la presenza della sottoclasse implica anche un peso positivo + const TString & cs = sottocat_anamag.row(i - 1); // Codice sottocategoria su ANAMAG + const TString cat = cs.left(2); // Codice categoria su ANAMAG + const real& weight = riproporziona_pesi_da_bolla ? pesi_bolla.get() : (real &) pesi_anamag[i - 1]; // Peso imballo da bolla o da ANAMAG + + if (cs.full() && weight != ZERO) { - const real& weight = art.conai_weight(i - 1); // Peso imballo su ANAMAG - - if (cache().get("&VECSS", cs).empty()) - log_message(format(TR("Bolla %ld - Articolo %s - Sottocategoria %s assente"), - ndoc, (const char *)(rowtype == "01" ? codart : custcode), - (const char *)cs)); - - rdoc.put(conai_sottocat_name(i + 1), cs); - rdoc.put(conai_peso_name(i + 1), weight); // ex QTAGG1 - rdoc.put(conai_esenzione_name(conai_str2class(cs.left(2)), LF_RIGHEDOC), - cfven.get(conai_esenzione_name(conai_str2class(cs.left(2)), LF_CFVEN))); // ex QTAGG2 - peso_imballo_anamag += weight; - pesi_anamag++; + rdoc.put(conai_sottocat_name(i), cs); + rdoc.put(conai_peso_name(i), weight); // ex QTAGG1 } } - // La sottocategoria della bolla prevale su quella anagrafica impostata sopra - if (conai_subclass.len() == 4) - { - rdoc.put(conai_sottocat_name(1), conai_subclass); - peso_imballo_ddt = real(get_real_str("WeightETUnit")); - if (peso_imballo_ddt.is_zero()) - peso_imballo_ddt = peso_imballo_anamag; - } - } - // if (pesi_anamag > 1) // Con imballi composti da vari materiali devo riportare o riproporzionare -// { - // Arrotondo la eventuale differenza di pesi al grammo - real diff = peso_imballo_ddt - peso_imballo_anamag; diff.round(3); - // Il peso in bolla e' diverso da quello in anagrafica: devo riproporzionarli - if (!diff.is_zero() && !peso_imballo_ddt.is_zero()) - { - TGeneric_distrib d(peso_imballo_ddt, 3); + const TString esenzione_name_rdoc = conai_esenzione_name(conai_str2class(conai_subclass.left(2)), LF_RIGHEDOC); + const TString esenzione_name_cfven = conai_esenzione_name(conai_str2class(conai_subclass.left(2)), LF_CFVEN); - for (int i = 1; i < FR_CMAX; i++) - if (rdoc.get(conai_sottocat_name(i + 1)).full()) - d.add(art.conai_weight(i - 1)); - for (int i = 1; i < FR_CMAX; i++) - if (rdoc.get(conai_sottocat_name(i + 1)).full()) - rdoc.put(conai_peso_name(i - 1), d.get()); - } - else - { - // Il peso in bolla coincide con quello in anagrafica: devo riportarli - for (int i = 0; i < FR_CMAX; i++) - if (rdoc.get(conai_sottocat_name(i + 1)).full()) - rdoc.put(conai_peso_name(i + 1), art.conai_weight(i)); - } - + rdoc.put(esenzione_name_rdoc, cfven.get(esenzione_name_cfven)); // ex QTAGG2 + } rdoc.put("FAMILY", get_str("FamilyCode")); // Uso campo virtuale RG1:FAMILY } diff --git a/src/ve/fatturaa.src b/src/ve/fatturaa.src index a2895cdf6..938f37f45 100755 --- a/src/ve/fatturaa.src +++ b/src/ve/fatturaa.src @@ -179,6 +179,7 @@ CMSH = S_NORMALE TIPO_SDI = S_NORMALE INVIO_FP = S_NORMALE REG_FISCF = S_NORMALE +NON_INVIO_XML = S_NORMALE [DEFAULT] Default(0)=F_CAUSTRASP|VEN diff --git a/src/ve/fatturac.src b/src/ve/fatturac.src index 872d13047..f737d578a 100755 --- a/src/ve/fatturac.src +++ b/src/ve/fatturac.src @@ -160,6 +160,7 @@ CMSH = S_NORMALE TIPO_SDI = S_NORMALE INVIO_FP = S_NORMALE REG_FISCF = S_NORMALE +NON_INVIO_XML = S_NORMALE [DEFAULT] diff --git a/src/ve/ve0300a.src b/src/ve/ve0300a.src index e9bcd0131..99405d586 100755 --- a/src/ve/ve0300a.src +++ b/src/ve/ve0300a.src @@ -2023,6 +2023,16 @@ SIZE=40 PROMPT="Regime Fisc. " FIELDNAME=REGFISC ITEMS=|@RF01|RF01 Ordinario@RF02|RF02 Contribuenti minimi@RF04|RF04 Agricoltura, connesse e pesca@RF05|RF05 Vendita sali e tabacchi@RF06|RF06 Commercio fiammiferi@RF07|RF07 Editoria@RF08|RF08 Gestione servizi tel. pubblica@RF09|RF09 Rivendita DdT pubblico e di sosta@RF10|RF10 Intr., giochi e altre attività@RF11|RF11 Agenzie viaggi e turismo@RF12|RF12 Agriturismo@RF13|RF13 Vendite a domicilio@RF14|RF14 Rivendita usato, arte, ant. o col.@RF15|RF15 Asta d’arte, ant. o da col.@RF16|RF16 IVA per cassa P.A.@RF17|RF17 IVA per cassa@RF18|RF18 Altro@RF19|RF19 Regime forfettario + +[INVIO_FP] +TYPE=T_CHECKBOX +GROUP=3100 +MSKID=F_NON_INVIO_FP +X=2 +Y=3 +PROMPT="Disabilita invio XML" +FIELDNAME=NOINVIOSDI + [LVGROUP] GROUP=4041 X=1 diff --git a/src/ve/ve0300c.ini b/src/ve/ve0300c.ini index 209baf067..65747cefd 100755 --- a/src/ve/ve0300c.ini +++ b/src/ve/ve0300c.ini @@ -108,7 +108,7 @@ HEIGHT=2 HEIGHT=3 [3100] -HEIGHT=2 +HEIGHT=3 [3200] HEIGHT=1 diff --git a/src/ve/velib.h b/src/ve/velib.h index 8f914115b..073495517 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -907,6 +907,7 @@ public: bool bloccato() const; bool chiuso() const; bool sospeso() const { return !chiuso();} + bool noinvioxml() const { return get(DOC_NOINVIOXML); } bool raggruppabile() const { return get_bool(DOC_RAGGR); } bool raggruppabile(const TDocumento& doc, TToken_string& campi) const; diff --git a/src/ve/veuml.h b/src/ve/veuml.h index 2d3e8bfbb..7f22f6d37 100755 --- a/src/ve/veuml.h +++ b/src/ve/veuml.h @@ -127,6 +127,7 @@ #define F_TIPO_SDI 230 #define F_INVIO_FP 231 #define F_REG_FISCF 232 +#define F_NON_INVIO_FP 233 #define F_CDC1 251 #define F_CDC12 262