Patch level : 12.0 420

Files correlati     : tf
Commento            : 
- Aggiunta gestione fornitore collegato al movimento nelle bolle doganali, se si tratta di un movimento custom verrà utilizzato quello nello sheet altrimenti sarà presente nel movimento
- Sistemato bug nello sheet, adesso viene controllato prima della creazione di una nuova riga se il documento è valido

git-svn-id: svn://10.65.10.50/branches/R_10_00@23953 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-07-17 08:15:41 +00:00
parent f69f3bdaad
commit 44940f556f
2 changed files with 88 additions and 64 deletions

View File

@ -1045,10 +1045,29 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
else else
continue; continue;
TVariant tipocf = strarr->get(_tipocf), codcf = strarr->get(_codcf), occas = strarr->get(_occas); TVariant vtipocf = strarr->get(_tipocf), vcodcf = strarr->get(_codcf), voccas = strarr->get(_occas);
TRectype r_cedeprest = getCli(tipocf.as_string(), codcf.as_string(), occas.as_string()); TRectype r_cedeprest = getCli(vtipocf.as_string(), vcodcf.as_string(), voccas.as_string());
TAnagrafica cedeprest(tipocf.as_string()[0], codcf.as_int(), occas.as_string()); TAnagrafica cedeprest;
// Con l'uscita di questo programma è stato messo un collegamento in prima nota
// per il fornitore a cui è riferita la bolla doganale
if(strcmp(strarr->get(_codnum),"BD") == 0)
{
TString codcf;
// Attenzione! Se è una riga inserita a mano dall'utente prendo lo stesso il fornitore della riga!
int movimento = strarr->get_int(_numero);
if(movimento >= MOV_CUSTOM)
codcf << strarr->get(_codcf);
else
codcf = cache().get(LF_MOV, strarr->get(_numero), "CFBOLLADOG");
r_cedeprest = getCli("F", codcf, "");
cedeprest.init('F', atol(codcf));
}
else
{
cedeprest.init(vtipocf.as_string()[0], vcodcf.as_int(), voccas.as_string());
}
TTrFa_record tff0400f("TFF0400F"); TTrFa_record tff0400f("TFF0400F");
tff0400f.set("P4_KEYPRGINVIO", getKey(strarr)); tff0400f.set("P4_KEYPRGINVIO", getKey(strarr));
@ -1070,8 +1089,9 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
} }
else else
{ {
// Se non ho nemmeno un dato e sto processando una bolla doganale metto OO e 11 "9" in id paese e id fiscale iva // Ovviamente tutte le bolle doganali fatte prima del rilascio
if(cedeprest.codice_fiscale().empty() && strcmp(strarr->get(_codnum),"BD") == 0) // non avranno questo campo compilato e quindi dovrò passare la partita IVA "OO99999999999"
if(strcmp(strarr->get(_codnum),"BD") == 0)
{ {
tff0400f.set("P4_FISCIVAPAESE", "OO"); tff0400f.set("P4_FISCIVAPAESE", "OO");
tff0400f.set("P4_FISCIVACOD", "99999999999"); tff0400f.set("P4_FISCIVACOD", "99999999999");
@ -1080,78 +1100,80 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale()); tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale());
} }
} }
if(cedeprest.ok()) // Con bolle doganali non a posto impazzisce
// 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)
{ {
// Bisogna fare un ragionamento più complesso, esistono ancora record salvati con Nome e Cognome nella prima parte // Sono sicuro che se è di tipo 3,7 o 8 ha la ragione sociale
// e non divisi come si fa adesso quindi farò così: char tipo = r_cedeprest.get_char(CLI_ALLEG);
bool rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8');
bool privato = tipo == '6';
if (!rsoc)
{
// Bisogna fare un ragionamento più complesso, esistono ancora record salvati con Nome e Cognome nella prima parte
// e non divisi come si fa adesso quindi farò così:
// Controllo se il nome è pieno // Controllo se il nome è pieno
if(cedeprest.nome().full()) 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)); // La vita è bella faccio che scrivere
tff0400f.set("P4_ANACOGNOME", nomeCog.get(0)); tff0400f.set("P4_ANANOME", cedeprest.nome());
tff0400f.set("P4_ANACOGNOME", cedeprest.cognome());
} }
else else
{ {
TString cognome; cognome << nomeCog.get(0); // Devo indovinare quale è il nome e il cognome
TToken_string nomeCog(cedeprest.cognome(), ' '); // Notare il separatore spazio
// Potrebbe essere un cognome tipo "De Fischello" // Controllo se ho solo un nome e un cognome
// Dai quante persone hanno più di 4 parole per nome e cognome? if(nomeCog.items() <= 2)
if(privato || (cognome.len() >= 2 && cognome.len() <= 4))
{ {
// Controllo che non sia una Ragione sociale! Tipo "ZG di Gianluigi Zibello" tff0400f.set("P4_ANANOME", nomeCog.get(1));
// Se è segnato privato me ne sbatto anche di sto controllo tff0400f.set("P4_ANACOGNOME", nomeCog.get(0));
if(privato || TString(nomeCog.get(1)).len() > 2) }
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))
{ {
cognome << " " << nomeCog.get(1); // Controllo che non sia una Ragione sociale! Tipo "ZG di Gianluigi Zibello"
TString nome; // Se è segnato privato me ne sbatto anche di sto controllo
for(int i = 2; i < nomeCog.items(); i++) if(privato || TString(nomeCog.get(1)).len() > 2)
nome << nomeCog.get(i) << " "; {
tff0400f.set("P4_ANANOME", cognome); cognome << " " << nomeCog.get(1);
tff0400f.set("P4_ANACOGNOME", nome); 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 else
rsoc = true; rsoc = true;
} }
else
rsoc = true;
} }
} }
}
// Ricontrollo!!!! rsoc potrebbe essere cambiato sopra // Ricontrollo!!!! rsoc potrebbe essere cambiato sopra
if(rsoc) if(rsoc)
{ {
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale()); tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
} }
TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenzaISO(); TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenzaISO();
// Valori necessari, se non ci sono salto // Valori necessari, se non ci sono salto
if(via.full() && cap.full() && nazione.full()) if(via.full() && cap.full() && nazione.full())
{ {
tff0400f.set("P4_SEDEIND", via); tff0400f.set("P4_SEDEIND", via);
tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza()); tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza());
tff0400f.set("P4_SEDECAP", cap); tff0400f.set("P4_SEDECAP", cap);
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
tff0400f.set("P4_SEDEPROV", cedeprest.provincia_residenza()); tff0400f.set("P4_SEDEPROV", cedeprest.provincia_residenza());
tff0400f.set("P4_SEDENAZ", nazione); tff0400f.set("P4_SEDENAZ", nazione);
}
} }
tff0400f.set("P4_GESTIONE", "D"); tff0400f.set("P4_GESTIONE", "D");

View File

@ -384,6 +384,7 @@ bool TTrFa_mask::saveAll()
mov.rewrite(rmov); mov.rewrite(rmov);
} }
} }
message_box("Salvataggio effettuato!");
return true; return true;
} }
@ -595,12 +596,13 @@ void TTrFa_mask::load_sheet()
FOR_EACH_ASSOC_OBJECT(recimposte, h, iva, rec) FOR_EACH_ASSOC_OBJECT(recimposte, h, iva, rec)
{ {
TToken_string& row = sheet.row(-1);
TRectype movimento = *(TRectype*)rec; TRectype movimento = *(TRectype*)rec;
// Controllo che sia un tipo documento da leggere // Controllo che sia un tipo documento da leggere
if(!get_bool(getTipoDoc(movimento.get("TIPODOC")))) continue; if(!get_bool(getTipoDoc(movimento.get("TIPODOC")))) continue;
// Creo una nuova riga nello sheet
TToken_string& row = sheet.row(-1);
/* Siccome mi cambiano l'ordine ogni volta e non ho voglia di cambiare tutto ovunque /* Siccome mi cambiano l'ordine ogni volta e non ho voglia di cambiare tutto ovunque
* basta settare i valori negli enum e lo sheet * basta settare i valori negli enum e lo sheet
*/ */