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
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());
TAnagrafica cedeprest(tipocf.as_string()[0], codcf.as_int(), occas.as_string());
TRectype r_cedeprest = getCli(vtipocf.as_string(), vcodcf.as_string(), voccas.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");
tff0400f.set("P4_KEYPRGINVIO", getKey(strarr));
@ -1070,8 +1089,9 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
}
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
if(cedeprest.codice_fiscale().empty() && strcmp(strarr->get(_codnum),"BD") == 0)
// Ovviamente tutte le bolle doganali fatte prima del rilascio
// 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_FISCIVACOD", "99999999999");
@ -1080,78 +1100,80 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
tff0400f.set("P4_CODFISC", cedeprest.codice_fiscale());
}
}
// 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)
if(cedeprest.ok()) // Con bolle doganali non a posto impazzisce
{
// 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ì:
// 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
// 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)
// Controllo se il nome è pieno
if(cedeprest.nome().full())
{
tff0400f.set("P4_ANANOME", nomeCog.get(1));
tff0400f.set("P4_ANACOGNOME", nomeCog.get(0));
// La vita è bella faccio che scrivere
tff0400f.set("P4_ANANOME", cedeprest.nome());
tff0400f.set("P4_ANACOGNOME", cedeprest.cognome());
}
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))
// 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)
{
// 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)
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))
{
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);
// 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
rsoc = true;
}
}
}
// Ricontrollo!!!! rsoc potrebbe essere cambiato sopra
if(rsoc)
{
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
}
TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenzaISO();
// Valori necessari, se non ci sono salto
if(via.full() && cap.full() && nazione.full())
{
tff0400f.set("P4_SEDEIND", via);
tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza());
tff0400f.set("P4_SEDECAP", cap);
tff0400f.set("P4_SEDECOMUNE", cedeprest.comune_residenza());
if(cedeprest.italiano()) // Campo ritornerebbe "EE" se estero
tff0400f.set("P4_SEDEPROV", cedeprest.provincia_residenza());
tff0400f.set("P4_SEDENAZ", nazione);
// Ricontrollo!!!! rsoc potrebbe essere cambiato sopra
if(rsoc)
{
tff0400f.set("P4_ANADENOM", cedeprest.ragione_sociale());
}
TString via = cedeprest.via_residenza(), cap = cedeprest.CAP_residenza(), nazione = cedeprest.stato_residenzaISO();
// Valori necessari, se non ci sono salto
if(via.full() && cap.full() && nazione.full())
{
tff0400f.set("P4_SEDEIND", via);
tff0400f.set("P4_SEDENRCIVICO", cedeprest.civico_residenza());
tff0400f.set("P4_SEDECAP", cap);
tff0400f.set("P4_SEDECOMUNE", cedeprest.comune_residenza());
if(cedeprest.italiano()) // Campo ritornerebbe "EE" se estero
tff0400f.set("P4_SEDEPROV", cedeprest.provincia_residenza());
tff0400f.set("P4_SEDENAZ", nazione);
}
}
tff0400f.set("P4_GESTIONE", "D");

View File

@ -384,6 +384,7 @@ bool TTrFa_mask::saveAll()
mov.rewrite(rmov);
}
}
message_box("Salvataggio effettuato!");
return true;
}
@ -595,12 +596,13 @@ void TTrFa_mask::load_sheet()
FOR_EACH_ASSOC_OBJECT(recimposte, h, iva, rec)
{
TToken_string& row = sheet.row(-1);
TRectype movimento = *(TRectype*)rec;
// Controllo che sia un tipo documento da leggere
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
* basta settare i valori negli enum e lo sheet
*/