Patch level : 12.0 428

Files correlati     : tf
Commento            : 
- Aggiunta gestione caratteri minuscoli accentati vengono trasformati senza accento con apice
- Aggiunto campo Esigibilità IVA
- Sistemato controllo ST
- Aggiunto al filtro "Da inviare" anche i records segnati come errori
- Aggiunto riempimento date se non messe

git-svn-id: svn://10.65.10.50/branches/R_10_00@23988 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-07-24 09:50:05 +00:00
parent 4e88d18395
commit dff6c2efcd
4 changed files with 66 additions and 15 deletions

View File

@ -1,6 +1,8 @@
#include "tf0.h" #include "tf0.h"
#include "tf0100b.h" #include "tf0100b.h"
#include "cglib03.h" // is_split_payment()
/* Utilities & Main App */ /* Utilities & Main App */
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
@ -230,24 +232,24 @@ const char* decodTipo(TToken_string* strarr)
return "TD04"; return "TD04";
else if(tipodoc == "ND") else if(tipodoc == "ND")
return "TD05"; return "TD05";
else if(tipodoc == "SD") else if(tipodoc == "ST")
{ {
// Devo capire a che documento è associato // Devo capire a che documento è associato
TRelation r(LF_MOV); TRelation r(LF_RMOV);
TRectype filter(LF_RMOV); TRectype filter(r.curr());
filter.put("NUMREG", strarr->get(_numero)); filter.put("NUMREG", strarr->get(_numero));
TCursor c(&r, "", 1, &filter, &filter); TCursor c(&r, "", 1, &filter, &filter);
for(c = 0; c.pos() < c.items(); ++c) for(c = 0; c.pos() < c.items(); ++c)
{ {
TRectype r = c.curr(); TRectype r = c.curr();
if(r.get("tipoc") == "C") if(r.get("TIPOC") == "C")
{ {
if(r.get("SEZIONE") == "D") if(r.get("SEZIONE") == "D")
return "TD01"; return "TD01";
else else
return "TD04"; return "TD04";
} else } else
if(r.get("tipoc") == "F") if(r.get("TIPOC") == "F")
{ {
if(r.get("SEZIONE") == "A") if(r.get("SEZIONE") == "A")
return "TD01"; return "TD01";
@ -293,6 +295,20 @@ bool saveRec(TToken_string row, bool esportato)
return rCust.write_rewrite(trasfatt) == NOERR; return rCust.write_rewrite(trasfatt) == NOERR;
} }
inline char noAccent(char a)
{
if(a == 'à')
return 'a';
else if(a == 'è' || a == 'é')
return 'e';
else if(a == 'ì')
return 'i';
else if(a == 'ò')
return 'o';
// 'ù' altrimenti
return 'u';
}
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// TTrFa_record // TTrFa_record
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
@ -404,14 +420,27 @@ const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var
TString& tmp = get_tmp_string(); TString& tmp = get_tmp_string();
tmp = str; tmp = str;
TString accenti = CARATTERI_ACCENTATI;
for(int i = 0; i < accenti.len(); i++)
{
for (int a = str.rfind(accenti[i]); a >= 0; a--)
{
if (tmp[a] == accenti[i])
{
tmp[a] = noAccent(accenti[i]);
tmp.insert("''", a+1);
}
}
}
for (int a = str.rfind('\''); a >= 0; a--) for (int a = str.rfind('\''); a >= 0; a--)
{ {
if (tmp[a] == '\'') if (tmp[a] == '\'')
tmp.insert("'", a); tmp.insert("'", a);
} }
tmp.insert("'", 0); tmp.insert("'", 0);
tmp << '\''; tmp << '\'';
return tmp; return tmp;
} }
// Elimina il record in base ai campi chiave // Elimina il record in base ai campi chiave
@ -988,7 +1017,7 @@ bool TTrFa_app::tff0200(TString key)
if(via.full() && cap.full() && nazione.full()) if(via.full() && cap.full() && nazione.full())
{ {
tff0200f.set("P2_SEDEIND", via); tff0200f.set("P2_SEDEIND", via);
tff0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza().left(8)); tff0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza().left(7));
tff0200f.set("P2_SEDECAP", cap); tff0200f.set("P2_SEDECAP", cap);
tff0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); tff0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza());
if(_ditta.italiano()) // Campo ritornerebbe "EE" se estero if(_ditta.italiano()) // Campo ritornerebbe "EE" se estero
@ -1006,7 +1035,7 @@ bool TTrFa_app::tff0200(TString key)
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO(); TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO();
tff0200f.set("P2_STABORGIND", via); tff0200f.set("P2_STABORGIND", via);
tff0200f.set("P2_STABORGNRCIVICO", rfso.civico_residenza().left(8)); tff0200f.set("P2_STABORGNRCIVICO", rfso.civico_residenza().left(7));
tff0200f.set("P2_STABORGCAP", cap); tff0200f.set("P2_STABORGCAP", cap);
tff0200f.set("P2_STABORGCOMUNE", rfso.comune_residenza()); tff0200f.set("P2_STABORGCOMUNE", rfso.comune_residenza());
if(rfso.italiano()) if(rfso.italiano())
@ -1077,6 +1106,9 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
TRectype r_cedeprest = getCli(vtipocf.as_string(), vcodcf.as_string(), voccas.as_string()); TRectype r_cedeprest = getCli(vtipocf.as_string(), vcodcf.as_string(), voccas.as_string());
TAnagrafica cedeprest; TAnagrafica cedeprest;
if(vtipocf.as_string() == "C" && vcodcf.as_string() == "2327")
bool tolla = true;
// Con l'uscita di questo programma è stato messo un collegamento in prima nota // Con l'uscita di questo programma è stato messo un collegamento in prima nota
// per il fornitore a cui è riferita la bolla doganale // per il fornitore a cui è riferita la bolla doganale
if(strcmp(strarr->get(_codnum),"BD") == 0) if(strcmp(strarr->get(_codnum),"BD") == 0)
@ -1202,7 +1234,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
} }
tff0400f.set("P4_SEDEIND", cedeprest.via_residenza()); tff0400f.set("P4_SEDEIND", cedeprest.via_residenza());
tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza().left(8)); tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza().left(7));
tff0400f.set("P4_SEDECAP", cedeprest.CAP_residenza()); tff0400f.set("P4_SEDECAP", cedeprest.CAP_residenza());
tff0400f.set("P4_SEDECOMUNE", cedeprest.comune_residenza()); tff0400f.set("P4_SEDECOMUNE", cedeprest.comune_residenza());
if(cedeprest.italiano()) // Campo ritornerebbe "EE" se estero if(cedeprest.italiano()) // Campo ritornerebbe "EE" se estero
@ -1264,6 +1296,8 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
TString natura = strarr->get(_natura); TString natura = strarr->get(_natura);
tff0700f.set("P7_TIPODOC", decodTipo(strarr)); tff0700f.set("P7_TIPODOC", decodTipo(strarr));
// Controllo il tipo di esigilità
tff0700f.set("P7_DATA", toDate(strarr->get(_datadoc))); tff0700f.set("P7_DATA", toDate(strarr->get(_datadoc)));
tff0700f.set("P7_NUMERO", strarr->get(_numdoc)); tff0700f.set("P7_NUMERO", strarr->get(_numdoc));
tff0700f.set("P7_DATAREG", toDate(strarr->get(_datareg))); // Obbligatoria nei DTR tff0700f.set("P7_DATAREG", toDate(strarr->get(_datareg))); // Obbligatoria nei DTR
@ -1305,6 +1339,8 @@ bool TTrFa_app::tff2200(TToken_string* strarr, int nriga)
tff2200f.set("PL_IMPOSTA", real(strarr->get(_importoIVA))); tff2200f.set("PL_IMPOSTA", real(strarr->get(_importoIVA)));
real aliquota = cache().get("%IVA", strarr->get(_aliquota), "R0"); real aliquota = cache().get("%IVA", strarr->get(_aliquota), "R0");
tff2200f.set("PL_ALIQUOTAIVA", aliquota); tff2200f.set("PL_ALIQUOTAIVA", aliquota);
TRectype thisMov = cache().get(LF_MOV, strarr->get(_numero));
tff2200f.set("PL_ESIGIVA", is_split_payment(thisMov) ? "S" : is_IVA_diff(thisMov) ? "D" : "I");
tff2200f.set("PL_NATURA", strarr->get(_natura)); tff2200f.set("PL_NATURA", strarr->get(_natura));
real det(strarr->get(_detraibile)); real det(strarr->get(_detraibile));
// Nella conversione la vigola viene persa e 100,00 diventa 10.000 quindi divido // Nella conversione la vigola viene persa e 100,00 diventa 10.000 quindi divido
@ -1337,7 +1373,7 @@ bool TTrFa_app::tff3100(TToken_string* strarr, TRectype r_ana)
TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO(); TString via = rfso.via_residenza(), cap = rfso.CAP_residenza(), nazione = rfso.stato_residenza_ISO();
tff3100f.set("PH_STABORGIND", via); tff3100f.set("PH_STABORGIND", via);
tff3100f.set("PH_STABORGNRCIVICO", rfso.civico_residenza().left(8)); tff3100f.set("PH_STABORGNRCIVICO", rfso.civico_residenza().left(7));
tff3100f.set("PH_STABORGCAP", cap); tff3100f.set("PH_STABORGCAP", cap);
tff3100f.set("PH_STABORGCOMUNE", rfso.comune_residenza()); tff3100f.set("PH_STABORGCOMUNE", rfso.comune_residenza());
if(rfso.italiano()) if(rfso.italiano())

View File

@ -57,6 +57,7 @@ enum filter_fatt
#define SPESOMETROBASE "ModuliSirio" #define SPESOMETROBASE "ModuliSirio"
#define REG_ATT 1 #define REG_ATT 1
#define REG_PAS 2 #define REG_PAS 2
#define CARATTERI_ACCENTATI "àèéìòù"
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza) /* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
* per avere l'inserimento nello sheet corretto */ * per avere l'inserimento nello sheet corretto */
@ -112,6 +113,8 @@ bool saveRec(TToken_string row, bool esportato = false);
inline TDate toDate(const char * date) { return TDate(date).string(); } inline TDate toDate(const char * date) { return TDate(date).string(); }
// Salto se la riga non è abilitata // Salto se la riga non è abilitata
#define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0) continue; #define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0) continue;
// Ritorno il carattere senza accento maiuscolo
inline char noAccent(char a);
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// TTrFa_record // TTrFa_record

View File

@ -590,6 +590,18 @@ void TTrFa_mask::load_sheet()
const char tipo = get(F_TIPOCF)[0]; const char tipo = get(F_TIPOCF)[0];
const long codice = get_long(F_CODCF); const long codice = get_long(F_CODCF);
TDate dal = get_date(F_DATAINI), al = get_date(F_DATAFIN); TDate dal = get_date(F_DATAINI), al = get_date(F_DATAFIN);
// Importanti! Evito errori dopo premendo il bottone invia
if(!dal.ok())
{
dal = TDate(01, 01, 2017); // Data inizio validità questo spesometro
set(F_DATAINI, dal);
}
if(!al.ok())
{
al = TDate(TODAY);
set(F_DATAFIN, al);
}
//TString key; key << "TIPOA=" << prefix().firm().get("TIPOA")<< ",CODANAGR=" << prefix().firm().get("CODANAGR"); //TString key; key << "TIPOA=" << prefix().firm().get("TIPOA")<< ",CODANAGR=" << prefix().firm().get("CODANAGR");
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR"); TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV"); const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV");
@ -711,7 +723,7 @@ bool TTrFa_mask::checkInvio(const TString& invio)
switch(get_int(F_FATTSEL)) switch(get_int(F_FATTSEL))
{ {
case 0: case 0:
ok = invio == "" || invio == FLAG_INVIO || invio == FLAG_FORZATO; ok = invio == "" || invio == FLAG_INVIO || invio == FLAG_FORZATO || invio == FLAG_ERRORE;
break; break;
case 1: case 1:
ok = invio == FLAG_INVIATO; ok = invio == FLAG_INVIATO;

View File

@ -191,8 +191,8 @@ int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal,
switch(cod) switch(cod)
{ {
case toSend: case toSend:
query << "&&((23.TFINVIO=\"\")||(23.TFINVIO=\"X\")||(23.TFINVIO=\"F\"))"; query << "&&((23.TFINVIO=\"\")||(23.TFINVIO=\"X\")||(23.TFINVIO=\"F\")||(23.TFINVIO=\"E\"))";
queryCust << "&&((TFINVIO=\"\")||(TFINVIO=\"X\")||(TFINVIO=\"F\"))"; queryCust << "&&((TFINVIO=\"\")||(TFINVIO=\"X\")||(TFINVIO=\"F\")||(TFINVIO=\"E\"))";
break; break;
case sent: case sent:
query << "&&(23.TFINVIO=\"I\")"; query << "&&(23.TFINVIO=\"I\")";