Patch level : 12.0 700
Files correlati : tf Commento : - Allineato porgramma per esterometro - Sistemata duplicazione dichiarazione macro
This commit is contained in:
parent
c97ad13eb3
commit
c470e5c3c6
@ -687,6 +687,9 @@ bool TTrFa_app::create()
|
||||
// Questa funzione crea/verifica il DB
|
||||
verifyDB(create);
|
||||
|
||||
// Setto se ha il modulo FP
|
||||
msk().set_has_fp(has_module(FPAUT));
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
|
@ -19,9 +19,13 @@
|
||||
#define B_TIPO_BOLLADOG 413
|
||||
#define B_TIPO_STORDOC 414
|
||||
|
||||
#define END_BOOLEAN 415
|
||||
// Boolean filtri FP
|
||||
#define B_ESTEROMETRO 416
|
||||
#define B_PAF_SENT 417
|
||||
#define B_PAF_NOT_SENT 418
|
||||
#define B_REVCHARGE 419
|
||||
|
||||
#define F_ESTEROMETRO 416
|
||||
#define END_BOOLEAN 419
|
||||
|
||||
#define END_MASK 421
|
||||
|
||||
|
@ -165,9 +165,37 @@ BEGIN
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 65 6
|
||||
BEGIN
|
||||
PROMPT 30 11 "Filtri clienti FP"
|
||||
MODULE FP
|
||||
END
|
||||
|
||||
BOOLEAN B_ESTEROMETRO
|
||||
BEGIN
|
||||
PROMPT 1 10 "Esporta solo fatture attive non inviate con FP"
|
||||
PROMPT 31 12 "Modalità esterometro"
|
||||
MESSAGE FALSE DISABLE,10@
|
||||
MESSAGE TRUE ENABLE,10@
|
||||
END
|
||||
|
||||
BOOLEAN B_PAF_SENT
|
||||
BEGIN
|
||||
PROMPT 31 13 "Fatture Inviate"
|
||||
GROUP 10
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
BOOLEAN B_PAF_NOT_SENT
|
||||
BEGIN
|
||||
PROMPT 31 14 "Fatture non Inviate"
|
||||
GROUP 10
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
BOOLEAN B_REVCHARGE
|
||||
BEGIN
|
||||
PROMPT 31 15 "Fatture in reverse charge"
|
||||
GROUP 10
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
|
@ -61,7 +61,10 @@ enum filter_fatt
|
||||
#define SPESOMETROBASE "ModuliSirio"
|
||||
#define REG_ATT 1
|
||||
#define REG_PAS 2
|
||||
|
||||
#ifndef CARATTERI_SPECIALI
|
||||
#define CARATTERI_SPECIALI "àèéìòù°"
|
||||
#endif
|
||||
|
||||
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
|
||||
* per avere l'inserimento nello sheet corretto */
|
||||
@ -173,12 +176,13 @@ class TTrFa_cursors : TObject
|
||||
bool _newCust;
|
||||
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
|
||||
TToken_string _alqCust;
|
||||
bool _has_fp;
|
||||
|
||||
TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento
|
||||
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom
|
||||
bool checkEnabled(TISAM_recordset* origCur);
|
||||
public:
|
||||
//TTrFa_cursors();
|
||||
TTrFa_cursors(bool has_fp) : c_rmoviva(nullptr), c_trasfatt(nullptr), _newMov(false), _newCust(false), _has_fp(has_fp){}
|
||||
~TTrFa_cursors();
|
||||
long int getIvaItems() { return c_rmoviva->items(); }
|
||||
long int getIvaPos() { return c_rmoviva->cursor()->pos(); }
|
||||
@ -199,6 +203,7 @@ class TTrFa_mask : public TAutomask
|
||||
TMaskmode _mode;
|
||||
bool _sheet_dirty;
|
||||
bool _filter_changed;
|
||||
bool _has_fp;
|
||||
|
||||
protected:
|
||||
virtual void next_page(int p);
|
||||
@ -208,6 +213,7 @@ protected:
|
||||
void openJava();
|
||||
|
||||
public:
|
||||
void set_has_fp(bool has_fp) { _has_fp = has_fp; }
|
||||
void setFilterChanged() { _filter_changed = true; }
|
||||
void load_sheet();
|
||||
TTrFa_mask(TString msk);
|
||||
|
@ -614,7 +614,7 @@ void TTrFa_mask::load_sheet()
|
||||
static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV");
|
||||
static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI");
|
||||
|
||||
TTrFa_cursors c;
|
||||
TTrFa_cursors c(_has_fp);
|
||||
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
|
||||
|
@ -75,7 +75,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
|
||||
|
||||
// Se non è un movimento o il controllo fallisce mi sposto
|
||||
int tipoDoc = getTipoDoc(c_rmoviva->get("23.TIPODOC").as_string());
|
||||
if(!newMov || !checkRecord(c_rmoviva) || tipoDoc == -1 || !msk().get_bool(tipoDoc))
|
||||
if(!newMov || !checkRecord(c_rmoviva, _has_fp) || tipoDoc == -1 || !msk().get_bool(tipoDoc))
|
||||
{
|
||||
static TString codiva;
|
||||
do
|
||||
@ -93,7 +93,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
|
||||
codiva.cut(0) << c_rmoviva->get("25.CODIVA").as_string();
|
||||
}
|
||||
} // Ciclo finchè non trovo un nuovo movimento o trovo cod IVA già presi da cust
|
||||
while((!_newMov && _alqCust.get_pos(codiva) > -1) || !checkEnabled(c_rmoviva) || !checkRecord(c_rmoviva));
|
||||
while((!_newMov && _alqCust.get_pos(codiva) > -1) || !checkEnabled(c_rmoviva) || !checkRecord(c_rmoviva, _has_fp));
|
||||
}
|
||||
|
||||
// Se ho cambiato movimento ritorno, leggerò poi al prossimo giro
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <recset.h>
|
||||
#include <recarray.h> // cache()
|
||||
#include "../fe/felib.h" // TAnagrafica
|
||||
|
||||
#include "modaut.h"
|
||||
|
||||
/****************************************************************************************************
|
||||
* TSpeCheck_msk
|
||||
@ -18,6 +18,7 @@ class TSpeCheck_msk : public TAutomask
|
||||
private:
|
||||
TAnagrafica _ditta;
|
||||
bool _selected;
|
||||
bool _has_fp;
|
||||
|
||||
void refresh();
|
||||
void fillNoFilter();
|
||||
@ -30,7 +31,9 @@ private:
|
||||
void saveAll();
|
||||
void deleteAll();
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
void set_has_fp(bool has_fp) { _has_fp = has_fp; }
|
||||
TSpeCheck_msk();
|
||||
virtual ~TSpeCheck_msk() {};
|
||||
};
|
||||
@ -173,7 +176,7 @@ void TSpeCheck_msk::fillNoFilter()
|
||||
for(bool ok = rset.move_first(); ok; ok = rset.move_next())
|
||||
{
|
||||
// Devo prendere tutti quelli che non vanno bene di records
|
||||
if(checkRecord(&rset)) continue;
|
||||
if(checkRecord(&rset, _has_fp)) continue;
|
||||
|
||||
TRectype clifo = getCli(rset.get("23.TIPO").as_string(), rset.get("23.CODCF").as_string(), rset.get("23.OCCAS").as_string());
|
||||
TToken_string& row = s.row(-1);
|
||||
@ -641,6 +644,7 @@ TSpeCheck_app& app() { return (TSpeCheck_app&)main_app(); }
|
||||
void TSpeCheck_app::main_loop()
|
||||
{
|
||||
TSpeCheck_msk msk;
|
||||
msk.set_has_fp(has_module(FPAUT));
|
||||
msk.run();
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ TString getRFSO(TString codrfso)
|
||||
* Nota bene: viene sfruttato un puntatore di TISAM_Recordset per non creare nuovi oggetti e velocizzare la chiamata
|
||||
* a questo punto il programma non ha ancora creato un record di $trasfatt con i dati che mi interessano
|
||||
*/
|
||||
bool checkRecord(TISAM_recordset* rec)
|
||||
bool checkRecord(TISAM_recordset* rec, bool has_fp)
|
||||
{
|
||||
// Il record non è valido se non è presente un cliente
|
||||
if(rec->get("23.TIPO").as_string()[0] == '\0' || rec->get("23.CODCF").as_int() == 0)
|
||||
@ -102,25 +102,38 @@ bool checkRecord(TISAM_recordset* rec)
|
||||
{
|
||||
// Tolgo tutti i movimenti di sola IVA e in reverse charge o di tipo 3 (Acquisto di beni e servizi di soggetti non residenti)
|
||||
TCausale caus(rec->get("23.CODCAUS").as_string(), rec->get("23.DATAREG").as_date().year());
|
||||
if(caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3))
|
||||
const bool filter_revcharge = msk().get_bool(B_ESTEROMETRO) ? msk().get_bool(B_REVCHARGE) : false;
|
||||
if(!filter_revcharge && caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3))
|
||||
return false;
|
||||
|
||||
// controllo se la fattura non è già stata spedita con la fatt. elettronica
|
||||
static TPaf_record paf0100f("PAF0100F");
|
||||
// controllo se il movimento è agganciato a un documento
|
||||
if(!rec->get("23.DPROVV").is_empty() && !rec->get("23.DANNO").is_empty() && !rec->get("23.DCODNUM").is_empty() && !rec->get("23.DNDOC").is_empty())
|
||||
if(msk().get_bool(B_ESTEROMETRO) && !rec->get("23.DPROVV").is_empty() && !rec->get("23.DANNO").is_empty() && !rec->get("23.DCODNUM").is_empty() && !rec->get("23.DNDOC").is_empty())
|
||||
{
|
||||
TString hfatt, bfatt;
|
||||
TRectype rdoc(LF_DOC);
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DPROVV").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DANNO").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DCODNUM").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DNDOC").as_string());
|
||||
|
||||
// se riesco a generare la chiave, trovo il record e ha il flag di gestione in errore o un errore esterno, salto la fattura (solo se attivo flag in maschera)
|
||||
if (msk().get_bool(F_ESTEROMETRO) && chiave_paf(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && (paf0100f.sq_get("P1_GESTIONE") == "E" || paf0100f.sq_get("P1_ERREST") == "*"))
|
||||
// Controllo valido solo per utenti non F8
|
||||
const bool check_paf_sent = msk().get_bool(B_PAF_SENT);
|
||||
const bool check_paf_not_sent = msk().get_bool(B_PAF_NOT_SENT);
|
||||
// Se l'utente ha il modulo FP e uno dei due filtri possibili non è stato selezionato, abilito il controllo sui paf
|
||||
if(has_fp && (!check_paf_sent || !check_paf_not_sent))
|
||||
{
|
||||
return false;
|
||||
TString hfatt, bfatt;
|
||||
TRectype rdoc(LF_DOC);
|
||||
static TLocalisamfile doc(LF_DOC);
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DPROVV").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DANNO").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DCODNUM").as_string());
|
||||
rdoc.put(DOC_PROVV, rec->get("23.DNDOC").as_string());
|
||||
|
||||
// Se riesco a generare la chiave, trovo il record e ha il flag di gestione in errore o un errore esterno, so che è stato inviato
|
||||
const bool paf_sent = rdoc.read(doc) == NOERR && chiave_paf(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "E" && paf0100f.sq_get("P1_ERREST") != "*";
|
||||
// Se voglio solo quelli inviati e non è stato inviato, RUSPA!
|
||||
if (check_paf_sent && !paf_sent)
|
||||
return false;
|
||||
|
||||
// Se voglio solo quelli non inviati ed è stato inviato, RUSPA!
|
||||
if (check_paf_not_sent && paf_sent)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,4 +22,4 @@ TString revCharge(TString numreg, int year);
|
||||
// Ritorna la ragione sociale del RFSO
|
||||
TString getRFSO(TString codrfso);
|
||||
// Controllo che sia un record che mi interessa
|
||||
bool checkRecord(TISAM_recordset* rec);
|
||||
bool checkRecord(TISAM_recordset* rec, bool has_fp);
|
Loading…
x
Reference in New Issue
Block a user