Patch level : 12.0 no-patch

Files correlati     : cg2, cg2100t.msk
Commento            :
- Modificati bottoni maschera fatture SDI
- Corretto riporta codice fornitore se non e' valorizzato
- Aggiunto scollegamento movimento da FPPRO
- Corretto controllo righe vuote IVA
- Riporta dati numdoc e datadoc anche col collega (per quelli che non hanno f1)
This commit is contained in:
Simone Palacino 2019-07-04 10:31:56 +02:00
parent 890c6936dd
commit 7d02362ae2
8 changed files with 117 additions and 294 deletions

View File

@ -131,11 +131,17 @@ TMask* TPrimanota_application::load_mask(int n)
if (m->find_by_id(F_COLFPPRO) != NULL)
m->hide(F_COLFPPRO);
if (m->find_by_id(DLG_LINK) != NULL)
{
m->disable(DLG_LINK);
m->disable(DLG_EDIT);
}
}
else
if (m->find_by_id(DLG_LINK) != NULL)
{
m->set_handler(DLG_LINK, fppro_mask);
m->set_handler(DLG_EDIT, scollega_handler);
}
if (_quadratura)
m->set_handler(F_ADJUST_IVA, quadratura_handler);
@ -1750,7 +1756,7 @@ void TPrimanota_application::clean_fppro()
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
if (_mode != MODE_MOD
|| !has_f1_db(&msk)
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT)
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega())
return;
const TString& numreg = msk.get(F_NUMREG);
@ -2660,6 +2666,11 @@ bool TPrimanota_application::save_dbmov(bool clean) const
mov.put(MOV_KEYFPPRO, !clean ? keyfppro : "");
ok = mov.rewrite() == NOERR;
}
if(clean && ok)
{
app().curr_mask().set(F_PROKEY, "");
app().curr_mask().set(F_COLFPPRO, "");
}
return ok;
}

View File

@ -10,6 +10,13 @@ BEGIN
MODULE FP
END
BUTTON DLG_EDIT 2 2
BEGIN
PROMPT 3 1 "Scollega F.E."
PICTURE TOOL_CANCEL
MODULE FP
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT 1 1 ""

View File

@ -10,13 +10,14 @@ END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 2 1 "Riporta Documento"
PROMPT 2 1 "Contabilizzaz."
PICTURE TOOL_EXPORT
MODULE F1
END
BUTTON DLG_LINK 2 2
BEGIN
PROMPT 3 1 "Collega Documento"
PROMPT 3 1 "Collega in Prima nota"
PICTURE TOOL_LINK
END
@ -33,7 +34,7 @@ PAGE "Fatture Ricevute SDI" -1 -1 77 20
NUMBER F_CODCLIFORS 6
BEGIN
PROMPT 1 1 "Codice fornitore"
PROMPT 0 1 "Fornitore"
FIELD CODCF
GROUP 1
USE LF_CLIFO
@ -54,27 +55,17 @@ BEGIN
FLAGS "D"
END
STRING F_COFIS 16
STRING F_RAGSOCS 50
BEGIN
PROMPT 35 1 "Cod. Fiscale "
GROUP 1
USE LF_CLIFO KEY 4
INPUT TIPOCF "F"
INPUT COFI F_COFIS
DISPLAY "Codice fiscale@16" COFI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Sospeso@C" SOSPESO
DISPLAY "Partita IVA@12" PAIV
COPY OUTPUT F_CODCLIFORS
CHECKTYPE NORMAL
ADD RUN cg0 -1
PROMPT 20 1 ""
INPUT TIPOCF F_CLIFO SELECT
INPUT RAGSOC F_RAGSOCCF
FLAGS "D"
END
STRING F_STATOPAIVS 2
BEGIN
PROMPT 1 2 "P. IVA"
PROMPT 0 2 "P. IVA"
USE %SCE
INPUT CODTAB F_STATOPAIVS
DISPLAY "Codice" CODTAB
@ -103,11 +94,21 @@ BEGIN
FLAGS "D"
END
STRING F_RAGSOCS 50
STRING F_COFIS 16
BEGIN
PROMPT 0 3 "Rag. Soc."
INPUT TIPOCF F_CLIFO SELECT
INPUT RAGSOC F_RAGSOCCF
PROMPT 35 2 "Cod. Fiscale "
GROUP 1
USE LF_CLIFO KEY 4
INPUT TIPOCF "F"
INPUT COFI F_COFIS
DISPLAY "Codice fiscale@16" COFI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Sospeso@C" SOSPESO
DISPLAY "Partita IVA@12" PAIV
COPY OUTPUT F_CODCLIFORS
CHECKTYPE NORMAL
ADD RUN cg0 -1
FLAGS "D"
END

View File

@ -3917,23 +3917,38 @@ bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr
void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
{
bool ok = false;
TLocalisamfile clifo(LF_CLIFO);
if (msk->get_codforn().empty())
TToken_string keys(msk->get_fpprokeys(), ';');
TString codforn = TFppro(keys).get_codforn();
if (codforn.empty())
codforn = msk->get_codforn();
if (codforn.empty())
{
clifo.setkey(5);
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_PAIV, msk->get_piva());
clifo.read();
ok = clifo.get(CLI_PAIV) == msk->get_piva();
if(!ok)
{
clifo.zero();
clifo.setkey(5);
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_PAIV, msk->get_piva());
clifo.put(CLI_STATOPAIV, "IT");
clifo.read();
}
}
else
{
clifo.setkey(1);
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_CODCF, msk->get_codforn());
clifo.put(CLI_CODCF, codforn);
clifo.read();
}
if (clifo.get(CLI_PAIV) == msk->get_piva() && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != msk->get_codforn()))
ok = clifo.get(CLI_PAIV) == msk->get_piva();
if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn))
{
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
@ -3964,16 +3979,26 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
{
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
cg_msk.set(F_DATADOC, msk->get_datadoc());
if (msk->get_numdoc().full())
write_clifo(cg_msk, msk);
write_righe_iva_f1(cg_msk, msk);
set_totale(cg_msk, msk);
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
if(write_scad_f1(cg_msk, msk))
app().set_scad_f1(cg_msk);
const bool bring = msk->should_bring_back();
if (bring)
{
if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty())
write_clifo(cg_msk, msk);
write_righe_iva_f1(cg_msk, msk);
set_totale(cg_msk, msk);
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
if (write_scad_f1(cg_msk, msk))
app().set_scad_f1(cg_msk);
}
// Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati
if (bring || cg_msk.get(F_NUMDOC).empty())
{
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
}
if (bring || cg_msk.get(F_DATADOC).empty())
cg_msk.set(F_DATADOC, msk->get_datadoc());
}
bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
@ -3995,12 +4020,7 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
msk->run();
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
if (msk->should_bring_back())
{
riporta_dati_f1(cg_msk, msk);
//TConfig ini("cg2CONTAB0001.ini");
//app().ini2mask(ini, cg_msk, false);
}
riporta_dati_f1(cg_msk, msk);
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
is_collegato(cg_msk.field(F_COLFPPRO));
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
@ -4009,6 +4029,30 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
return true;
}
bool TPrimanota_application::scollega(const bool set)
{
static bool scollega = false;
if (set)
return scollega = true;
const bool last = scollega;
scollega = false;
return last;
}
bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
{
TMask& cg_msk = f.mask();
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
return true;
if (cg_msk.get_bool(F_COLFPPRO))
{
scollega(true);
app().clean_fppro();
app().save_dbmov(true);
message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata.");
}
}
bool TPrimanota_application::is_collegato(TMask_field& f)
{
TMask& cg_msk = f.mask();

View File

@ -194,6 +194,7 @@ class TPrimanota_application : public TRelation_application
// Handlers per aggancio FPPRO
// Bottone per maschera FPPRO
static bool fppro_mask(TMask_field& f, KEY key);
static bool scollega_handler(TMask_field& f, KEY key);
static bool is_collegato(TMask_field& f);
static void fppromask_set_handl(TMask* msk);
static void load_list(TMask* msk, KEY k);
@ -224,6 +225,7 @@ protected: // TApplication
int save_fppro();
// Salva sul movimento il riferimento al documento in FPPRO (keys)
bool save_dbmov(bool clean = false) const;
static bool scollega(bool set = false);
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
void clean_fppro();
// setta variabili prima del controllo has_f1_db

View File

@ -1,251 +0,0 @@
#include "cg2100.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_CONFIG 2 2
BEGIN
PROMPT 1 1 "Ricarica Fatture"
PICTURE TOOL_CONVERT
END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 2 1 "Riporta Documento"
MODULE F1
END
BUTTON DLG_LINK 2 2
BEGIN
PROMPT 3 1 "Collega Documento"
PICTURE TOOL_LINK
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 4 1 "Fine"
PICTURE TOOL_QUIT
END
ENDPAGE
PAGE "Fatture Ricevute SDI" -1 -1 77 20
NUMBER F_CODCLIFORS 6
BEGIN
PROMPT 1 1 "Codice fornitore"
FLAGS "D"
END
STRING F_COFIS 16
BEGIN
PROMPT 35 1 "Cod. Fiscale "
FLAGS "D"
END
STRING F_STATOPAIVS 2
BEGIN
PROMPT 1 2 "P. IVA"
FLAGS "D"
END
STRING F_PIVAS 12
BEGIN
PROMPT 15 2 ""
FLAGS "D"
END
STRING F_RAGSOCS 50
BEGIN
PROMPT 0 3 "Rag. Soc."
FLAGS "D"
END
BOOLEAN F_ENABSEARCH
BEGIN
PROMPT 0 4 "Effettua ricerca per P.IVA/Disabilita ricerca per cod. Fornitore"
END
BOOLEAN F_ENABDATE
BEGIN
PROMPT 0 5 "Abilita filtro per data"
END
DATE F_DATESEARCH
BEGIN
PROMPT 35 5 "Data documento"
FLAGS "H"
END
TEXT F_SHEET_TEXT
BEGIN
PROMPT 0 6 "@BSelezionare la fattura, quindi premere 'Collega Documento'"
END
BOOLEAN F_SHOWALL
BEGIN
PROMPT 0 7 "Mostra anche fatture già registrate"
END
SPREADSHEET F_SHEETFPPROS 0 15
BEGIN
PROMPT 0 8 ""
ITEM " "
ITEM "Tipo Doc@5"
ITEM "Data\nRicezione@8"
ITEM "Data\nDoc.@8"
ITEM "Totale\nDocumento@7"
ITEM "Ritenute\nfiscali@6"
ITEM "Numero@14"
ITEM "Ragione sociale@40"
ITEM "Paese@4"
ITEM "P. IVA@10"
ITEM "Cod. Fiscale@14"
ITEM "Tipo Protocollo\nin ingresso@10"
ITEM "Progressivo\ndi ingresso@10"
ITEM "Chiave FPPRO@40"
END
STRING F_NUMEROI 20
BEGIN
PROMPT 1 20 "NUMERO"
FLAGS "H"
END
DATE F_DATAI
BEGIN
PROMPT 1 21 "DATA"
FLAGS "H"
END
NUMBER F_TOTDOCI 10 3
BEGIN
PROMPT 1 22 "IMPTOTDOC"
FLAGS "H"
END
STRING F_PROTFPPROI 18
BEGIN
PROMPT 1 23 "Tipo Protocollo"
FLAGS "H"
END
STRING F_FPPROKEYSI 80
BEGIN
PROMPT 1 19 "db key"
HELP "Chiave database"
FLAGS "H"
END
ENDPAGE
ENDMASK
PAGE "ELEMENTI SPREADSHEET" -1 -1 77 20
BOOLEAN F_SELFPPROS
BEGIN
PROMPT 1 0 "Selected"
FLAGS ""
END
STRING F_TIPODOCS 4
BEGIN
PROMPT 10 0 "TIPODOC"
FLAGS "D"
END
DATE F_DATAS
BEGIN
PROMPT 1 1 "DATA"
FLAGS "D"
END
DATE F_DATAORARICS
BEGIN
PROMPT 1 2 "DATAORARIC"
FLAGS "D"
END
NUMBER F_IMPTOTDOCS 10 3
BEGIN
PROMPT 1 3 "IMPTOTDOC"
FLAGS "D"
END
NUMBER F_RITENUTE 10 3
BEGIN
PROMPT 1 4 "Ritenute d'acconto"
FLAGS "D"
END
STRING F_NUMEROS 20
BEGIN
PROMPT 1 5 "NUMERO"
FLAGS "D"
END
STRING F_RAGXML 50
BEGIN
PROMPT 1 8 ""
FLAGS "D"
HELP "Ragione sociale scritta nell'xml"
END
STRING F_FISCIVAPAESES 2
BEGIN
PROMPT 1 6 "FISCIVAPAESE"
FLAGS "D"
END
STRING F_FISCIVACODS 16
BEGIN
PROMPT 1 7 "FISCIVACOD"
FLAGS "D"
END
STRING F_CODFISCALES 16
BEGIN
PROMPT 1 8 "CODFISCALE"
FLAGS "D"
END
STRING F_TIPOPROTS 2
BEGIN
PROMPT 1 9 "TIPOPROT"
FLAGS "D"
END
NUMBER F_PROGRESSS 10 0
BEGIN
PROMPT 1 10 "PROGRESS"
FLAGS "D"
END
STRING F_KEYFPPROS 80
BEGIN
PROMPT 1 11 "CHIAVE FPPRO"
FLAGS "D"
END
ENDPAGE
TOOLBAR "Documento" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
END
ENDPAGE
ENDMASK

View File

@ -88,6 +88,14 @@ int TFppro::get_numreg(TToken_string& keys)
return get_numreg();
}
TString TFppro::get_codforn() const
{
TString query;
query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str();
_db->sq_set_exec(query);
return _db->sq_get("PZ_CLIFOR");
}
TDate TFppro::get_datareg()
{
if (!_is_set)

View File

@ -50,6 +50,7 @@ public:
void get_keys_fppro();
int get_numreg();
int get_numreg(TToken_string& keys);
TString get_codforn() const;
TDate get_datareg();
TDate get_datareg(TToken_string& keys);
real get_ritenute() const;