Patch level : 12.0 412
Files correlati : Commento : Maschera: - Aggiunti stati all'invio Programma: - Aggiunto controllo per documenti con più righe con stessa aliquota, a meno che non sia stato specificato il flag di invio "Forzato" verrà sempre salvato l'ultimo trovato e messo da non inviare il/i precedente/i - Implementato superalgoritmo di controllo nomi in anagrafica clienti: Con questo nuovo metodo se ci troviamo nel caso di una persona fisica e non è stato specificato il tipo privato andrò a controllare il campo ragione_sociale e farò dei ragionamenti su di esso così da saper dividere nome e cognome (o eventualmente salvare tutta la ragione sociale) in caso di anagrafica datata Tracciati: - Aggiornati tracciati, adesso il campo numreg è lungo 10 git-svn-id: svn://10.65.10.50/branches/R_10_00@23917 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1ae69c9175
commit
91e466970e
@ -1,3 +1,3 @@
|
|||||||
173
|
173
|
||||||
0
|
0
|
||||||
$trasfatt|1|1|107|0|Tabella trasferimento fatture|||
|
$trasfatt|2|2|110|0|Tabella trasferimento fatture|||
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
173
|
173
|
||||||
15
|
15
|
||||||
NUMREG|3|7|0|Codice esercizio
|
NUMREG|3|10|0|Codice esercizio
|
||||||
TIPO|7|1|0|Tipo <C>liente o <F>ornitore
|
TIPO|7|1|0|Tipo <C>liente o <F>ornitore
|
||||||
CODCF|3|6|0|Codice
|
CODCF|3|6|0|Codice
|
||||||
TIPODOC|1|2|0|Tipo documento
|
TIPODOC|1|2|0|Tipo documento
|
||||||
@ -13,7 +13,7 @@ IMPOSTA|4|18|3|Imposta
|
|||||||
CODIVA|1|4|0|Codice IVA
|
CODIVA|1|4|0|Codice IVA
|
||||||
TIPODET|1|1|0|Codice detraibilità
|
TIPODET|1|1|0|Codice detraibilità
|
||||||
AUTOFATT|8|1|0|Booleano autofattura
|
AUTOFATT|8|1|0|Booleano autofattura
|
||||||
TFINVIO|8|1|0|Flag Invio
|
TFINVIO|7|1|0|Flag Invio
|
||||||
TFDATA|5|8|0|Data ultimo invio
|
TFDATA|5|8|0|Data ultimo invio
|
||||||
1
|
1
|
||||||
NUMREG+CODIVA|
|
NUMREG+CODIVA|
|
||||||
|
@ -642,7 +642,7 @@ TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& c
|
|||||||
bool TTrFa_cursors::checkRecord(TISAM_recordset* rec)
|
bool TTrFa_cursors::checkRecord(TISAM_recordset* rec)
|
||||||
{
|
{
|
||||||
TString codiva = rec->get("25.CODIVA").as_string();
|
TString codiva = rec->get("25.CODIVA").as_string();
|
||||||
|
|
||||||
// Tolgo i non soggetti
|
// Tolgo i non soggetti
|
||||||
TCodiceIVA cod(codiva);
|
TCodiceIVA cod(codiva);
|
||||||
if(cod.tipo() == "NS")
|
if(cod.tipo() == "NS")
|
||||||
@ -743,7 +743,6 @@ void TTrFa_mask::next_page(int p)
|
|||||||
|
|
||||||
bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
{
|
{
|
||||||
case F_DATAINI:
|
case F_DATAINI:
|
||||||
@ -1073,6 +1072,10 @@ bool TTrFa_mask::checkAll()
|
|||||||
TExternal_app servizio("cg1 -2 L");
|
TExternal_app servizio("cg1 -2 L");
|
||||||
servizio.run();
|
servizio.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sistemo i flag
|
||||||
|
theFinalCheckDown();
|
||||||
|
|
||||||
static TPrinter stampa;
|
static TPrinter stampa;
|
||||||
stampa.reset();
|
stampa.reset();
|
||||||
stampa.open();
|
stampa.open();
|
||||||
@ -1085,7 +1088,7 @@ bool TTrFa_mask::checkAll()
|
|||||||
riga.put("Tipo errore", 40);
|
riga.put("Tipo errore", 40);
|
||||||
stampa.setheaderline(3, riga);
|
stampa.setheaderline(3, riga);
|
||||||
riga.reset();
|
riga.reset();
|
||||||
riga.put(TR("Tutti i record errati sono stati segnati con il codice \"Errore\" e non verranno inviati"), 0);
|
riga.put(TR("Tutti i record qui elencati sono stati segnati con il codice \"Errore\" e non verranno inviati"), 0);
|
||||||
stampa.setheaderline(2, riga);
|
stampa.setheaderline(2, riga);
|
||||||
riga.reset();
|
riga.reset();
|
||||||
stampa.setheaderline(4, riga);
|
stampa.setheaderline(4, riga);
|
||||||
@ -1181,6 +1184,43 @@ bool TTrFa_mask::checkNotEmpty()
|
|||||||
return sheet.full();
|
return sheet.full();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TTrFa_mask::theFinalCheckDown()
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
TAssoc_array cliDocs;
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||||
|
{
|
||||||
|
// Chiave: TIPOCF + CODCF + NUMDOC + CODIVA
|
||||||
|
TString key; key << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_numdoc) << "|" << strarr->get(_aliquota);
|
||||||
|
TToken_string newNumero; newNumero.add(r, 0); newNumero.add(strarr->get_char(_invio), 1);
|
||||||
|
if(cliDocs.is_key(key))
|
||||||
|
{
|
||||||
|
TToken_string oldnumero = *(TToken_string*)cliDocs.objptr(key);
|
||||||
|
TString oldflag; oldnumero.get(1, oldflag);
|
||||||
|
if(oldflag == FLAG_FORZATO)
|
||||||
|
flagRow(r, FLAG_NINVIO);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int oldr; oldnumero.get(0, oldr);
|
||||||
|
flagRow(oldr, FLAG_NINVIO);
|
||||||
|
}
|
||||||
|
|
||||||
|
cliDocs.add(key, newNumero);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cliDocs.add(key, newNumero);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TTrFa_mask::flagRow(int nrow, TString flag)
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
TToken_string& row = sheet.row(nrow);
|
||||||
|
row.add(flag, _invio);
|
||||||
|
}
|
||||||
|
|
||||||
TRecnotype TTrFa_mask::nuovo_progr() const
|
TRecnotype TTrFa_mask::nuovo_progr() const
|
||||||
{
|
{
|
||||||
static TRectype app(LF_TRASFATT);
|
static TRectype app(LF_TRASFATT);
|
||||||
@ -1844,6 +1884,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
|
|||||||
|
|
||||||
TAnagrafica cedeprest(LF_CLIFO, strarr->get_char(_tipocf), strarr->get_long(_codcf));
|
TAnagrafica cedeprest(LF_CLIFO, strarr->get_char(_tipocf), strarr->get_long(_codcf));
|
||||||
TString keyCedPrest; keyCedPrest << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf);
|
TString keyCedPrest; keyCedPrest << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf);
|
||||||
|
|
||||||
TRectype r_cedeprest = cache().get(LF_CLIFO, keyCedPrest);
|
TRectype r_cedeprest = cache().get(LF_CLIFO, keyCedPrest);
|
||||||
TString statocli = cache().get("%STA", r_cedeprest.get("STATOCF"), "S10");
|
TString statocli = cache().get("%STA", r_cedeprest.get("STATOCF"), "S10");
|
||||||
// Se rimane vuoto è italiano
|
// Se rimane vuoto è italiano
|
||||||
@ -1874,12 +1915,63 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cedeprest.fisica())
|
// Sono sicuro che se è di tipo 3,7 o 8 ha la ragione sociale
|
||||||
|
char tipo = r_cedeprest.get_char(CLI_ALLEG);
|
||||||
|
bool rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8');
|
||||||
|
bool privato = tipo == '6';
|
||||||
|
|
||||||
|
if (!rsoc)
|
||||||
{
|
{
|
||||||
tff0400f.set("P4_ANANOME", cedeprest.nome());
|
// Bisogna fare un ragionamento più complesso, esistono ancora record salvati con Nome e Cognome nella prima parte
|
||||||
tff0400f.set("P4_ANACOGNOME", cedeprest.cognome());
|
// e non divisi come si fa adesso quindi farò così:
|
||||||
|
|
||||||
|
// Controllo se il nome è pieno
|
||||||
|
if(cedeprest.nome().full())
|
||||||
|
{
|
||||||
|
// La vita è bella faccio che scrivere
|
||||||
|
tff0400f.set("P4_ANANOME", cedeprest.nome());
|
||||||
|
tff0400f.set("P4_ANACOGNOME", cedeprest.cognome());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Devo indovinare quale è il nome e il cognome
|
||||||
|
TToken_string nomeCog(cedeprest.cognome(), ' '); // Notare il separatore spazio
|
||||||
|
// Controllo se ho solo un nome e un cognome
|
||||||
|
if(nomeCog.items() <= 2)
|
||||||
|
{
|
||||||
|
tff0400f.set("P4_ANANOME", nomeCog.get(1));
|
||||||
|
tff0400f.set("P4_ANACOGNOME", nomeCog.get(0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString cognome; cognome << nomeCog.get(0);
|
||||||
|
|
||||||
|
// Potrebbe essere un cognome tipo "De Fischello"
|
||||||
|
// Dai quante persone hanno più di 4 parole per nome e cognome?
|
||||||
|
if(privato || (cognome.len() >= 2 && cognome.len() <= 4))
|
||||||
|
{
|
||||||
|
// Controllo che non sia una Ragione sociale! Tipo "ZG di Gianluigi Zibello"
|
||||||
|
// Se è segnato privato me ne sbatto anche di sto controllo
|
||||||
|
if(privato || TString(nomeCog.get(1)).len() > 2)
|
||||||
|
{
|
||||||
|
cognome << " " << nomeCog.get(1);
|
||||||
|
TString nome;
|
||||||
|
for(int i = 2; i < nomeCog.items(); i++)
|
||||||
|
nome << nomeCog.get(i) << " ";
|
||||||
|
tff0400f.set("P4_ANANOME", cognome);
|
||||||
|
tff0400f.set("P4_ANACOGNOME", nome);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rsoc = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rsoc = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// Ricontrollo!!!! rsoc potrebbe essere cambiato sopra
|
||||||
|
if(rsoc)
|
||||||
{
|
{
|
||||||
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
|
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
|
||||||
}
|
}
|
||||||
|
@ -191,11 +191,13 @@ BEGIN
|
|||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST A_INVIO 1 10
|
LIST A_INVIO 1 15
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 10 "Da inviare"
|
PROMPT 1 10 "Da inviare"
|
||||||
ITEM "X|Da Inviare"
|
ITEM "X|Da Inviare"
|
||||||
ITEM "E|Errore"
|
ITEM "N|Da non inviare"
|
||||||
|
ITEM "F|Forzato"
|
||||||
|
ITEM "E|Errato"
|
||||||
FIELD INVIO
|
FIELD INVIO
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -45,6 +45,11 @@ enum filter_fatt
|
|||||||
#define DTE_PROVV "DTE0000001"
|
#define DTE_PROVV "DTE0000001"
|
||||||
#define DTR_PROVV "DTR0000001"
|
#define DTR_PROVV "DTR0000001"
|
||||||
#define TOLLARANZA 0.05
|
#define TOLLARANZA 0.05
|
||||||
|
// Flag invio
|
||||||
|
#define FLAG_INVIO "X"
|
||||||
|
#define FLAG_ERRORE "E"
|
||||||
|
#define FLAG_NINVIO "N"
|
||||||
|
#define FLAG_FORZATO "F"
|
||||||
|
|
||||||
/* 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 */
|
||||||
@ -209,6 +214,11 @@ public:
|
|||||||
bool checkRec(TPrinter* stampa, TToken_string rec);
|
bool checkRec(TPrinter* stampa, TToken_string rec);
|
||||||
// Controllo che siano presenti records
|
// Controllo che siano presenti records
|
||||||
bool checkNotEmpty();
|
bool checkNotEmpty();
|
||||||
|
// Controllo finale prima di inviare il tutto, se ci sono fatture
|
||||||
|
// con più volte lo stesso codice aliquota disabilito il precedente
|
||||||
|
void theFinalCheckDown();
|
||||||
|
// Mette il flag di invio = [flag] per la riga numero [nrow]
|
||||||
|
void flagRow(int nrow, TString flag);
|
||||||
};
|
};
|
||||||
// Funzione inline di stampa
|
// Funzione inline di stampa
|
||||||
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
|
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user