From 725ad83724d380112c43b925a4fcdeb4032e6b6d Mon Sep 17 00:00:00 2001 From: mtollari Date: Fri, 28 Jul 2017 08:20:30 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2012.?= =?UTF-8?q?0=20428=20Files=20correlati=20=20=20=20=20:=20tf=20Commento=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20:=20Inizio=20sviluppo=20progra?= =?UTF-8?q?mma=20di=20controllo=20spesometro,=20spostate=20alcune=20funzio?= =?UTF-8?q?ni=20in=20tfutility=20per=20comodit=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/branches/R_10_00@24008 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/tf/tf0.cpp | 6 +- src/tf/tf0.h | 1 + src/tf/tf0100.cpp | 42 +------ src/tf/tf0100a.uml | 3 - src/tf/tf0100b.h | 13 +- src/tf/tf0101.cpp | 41 +----- src/tf/tf0400.cpp | 225 +++++++++++++++++++++++++++++++++ src/tf/tf0400a.h | 32 +++++ src/tf/tf0400a.uml | 289 +++++++++++++++++++++++++++++++++++++++++++ src/tf/tfmenu.men | 5 +- src/tf/tfutility.cpp | 78 ++++++++++++ src/tf/tfutility.h | 21 ++++ 12 files changed, 658 insertions(+), 98 deletions(-) create mode 100644 src/tf/tf0400.cpp create mode 100644 src/tf/tf0400a.h create mode 100644 src/tf/tf0400a.uml create mode 100644 src/tf/tfutility.cpp create mode 100644 src/tf/tfutility.h diff --git a/src/tf/tf0.cpp b/src/tf/tf0.cpp index c9d5eb804..e21cc1644 100644 --- a/src/tf/tf0.cpp +++ b/src/tf/tf0.cpp @@ -10,11 +10,9 @@ int main(int argc, char** argv) { case 1 : rt = tf0200(argc, argv); break; // Comunicazione Liquidazioni Periodiche IVA - //case 2 : rt = tf0300(argc, argv); break; // Nuovo Spesometro (2017) - //case 3: rt = tf0400(argc, argv); break; // Invio TF + case 3: rt = tf0400(argc, argv); break; // Controllo Spesometro case 4: rt = tf0500(argc, argv); break; // Invio IVA - //case 5: rt = tf0600(argc, argv); break; // Invio Spesometro - default: rt = tf0100(argc, argv); break; // Trasferimento Fatture Elettroniche + default: rt = tf0100(argc, argv); break; // Spesometro } return rt; } diff --git a/src/tf/tf0.h b/src/tf/tf0.h index 08d868596..5aeb56428 100644 --- a/src/tf/tf0.h +++ b/src/tf/tf0.h @@ -3,6 +3,7 @@ int tf0100(int argc, char* argv[]); int tf0200(int argc, char* argv[]); +int tf0400(int argc, char* argv[]); int tf0500(int argc, char* argv[]); #endif diff --git a/src/tf/tf0100.cpp b/src/tf/tf0100.cpp index 773ae0ee0..7f0de895d 100644 --- a/src/tf/tf0100.cpp +++ b/src/tf/tf0100.cpp @@ -92,30 +92,6 @@ int getTipoDoc(TString id) return ret; } -TRectype getTrasFatt(TString reg, TString codiva) -{ - TString key = reg; key << "|" << codiva; - return cache().get(LF_TRASFATT, key); -} - -TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi) -{ - TString key = tipocf; key << "|" << codcf; - const TRectype& cli = cache().get(LF_CLIFO, key); - if(cli.get_bool("OCCAS")) - { - TRectype cli(LF_CLIFO); - TRectype occas = cache().get(LF_OCCAS, ocfpi); - cli.put("RAGSOC" , occas.get("RAGSOC")); - cli.put("CODRFSO" , ""); - cli.put("PAIV" , occas.get("PAIV")); - cli.put("COFI" , occas.get("COFI")); - return cli; - } - else - return cli; -} - // Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str) { @@ -149,14 +125,6 @@ bool xvt_fsys_fupdate(const char* src, const char* dst) return ok; } -// Controlla se l'azienda ha un RFSO -bool haveRFSO(TString& codrfso) -{ - codrfso = cache().get(LF_NDITTE, prefix().firm().codice(), "CODRFSO"); - if(codrfso == "") return false; - return true; -} - /* Ritorno il tipo di documento * TD01: Fattura * TD04: Nota di credito @@ -914,8 +882,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) fo = true; if(cli || fo) break; } - // Metto qua il numero di telefono per dopo - TString80 tel; tel << firm.get("PTEL") << firm.get("TEL"); bool ok = false; if(cli) { @@ -946,8 +912,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) dte.set("P1_TRASMITTPAESE", paese); dte.set("P1_TRASMITTCOD", ""); dte.set("P1_TIPOINVIO", "DTE"); - dte.set("P1_TELEFONO", tel); - dte.set("P1_MAIL", firm.get("MAIL")); dte.set("P1_GESTIONE", ""); ok = dte.insert(); if(!ok) return false; @@ -983,8 +947,6 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) dtr.set("P1_TRASMITTPAESE", paese); dtr.set("P1_TRASMITTCOD", ""); dtr.set("P1_TIPOINVIO", "DTR"); - dtr.set("P1_TELEFONO", tel); - dtr.set("P1_MAIL", firm.get("MAIL")); dtr.set("P1_GESTIONE", ""); ok = dtr.insert(); if(!ok) return false; @@ -1112,7 +1074,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet) TVariant vtipocf = strarr->get(_tipocf), vcodcf = strarr->get(_codcf), voccas = strarr->get(_occas); #ifdef DBG - if(vtipocf.as_string() == "F" && vcodcf.as_string() == "358") + if(vtipocf.as_string() == "C" && vcodcf.as_string() == "316") bool tolla = true; #endif @@ -1185,7 +1147,7 @@ bool TTrFa_app::tff0400(TSheet_field& sheet) { // 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 rsoc = cedeprest.giuridica() || (tipo == '3' || tipo == '7' || tipo == '8' || tipo == '\0'); bool privato = tipo == '6'; if (!rsoc) diff --git a/src/tf/tf0100a.uml b/src/tf/tf0100a.uml index 2dbea2f80..5d9dd44e7 100644 --- a/src/tf/tf0100a.uml +++ b/src/tf/tf0100a.uml @@ -181,8 +181,6 @@ BEGIN ITEM "Rev.\nCharge@4" ITEM "Auto\nfatt.@3" ITEM "Spedita@5" - ITEM "Invio@3" - ITEM "Mod.@3" ITEM "N.\nRegistraz.@10" ITEM "Codici Errori@10" DEFAULT "*" // Impedisce il salvataggio su profilo .ini @@ -361,7 +359,6 @@ BEGIN DISPLAY "Vent." S6 DISPLAY "Sospeso" B2 OUTPUT A_ALIQUOTA CODTAB - HELP "Codice IVA" CHECKTYPE REQUIRED VALIDATE ZEROFILL_FUNC 2 END diff --git a/src/tf/tf0100b.h b/src/tf/tf0100b.h index 7bc1734e2..6b37a176c 100644 --- a/src/tf/tf0100b.h +++ b/src/tf/tf0100b.h @@ -19,6 +19,7 @@ #include "../fe/felib.h" #include "tf0100a.h" +#include "tfutility.h" ///////////////////////////////////////////////////////////////////////////////////// // Globals ///////////////////////////////////////////////////////////////////////////////////// @@ -95,16 +96,11 @@ enum spesometroFields{ // Da un id ritorna il tipo doc corrispondente TString getTipoDoc(int id); int getTipoDoc(TString id); -// Ritorna il record custom -TRectype getTrasFatt(TString reg, TString codiva); -// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas -TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi); + // Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str); // Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h) bool xvt_fsys_fupdate(const char* src, const char* dst); -// Controlla se l'azienda ha un RFSO -bool haveRFSO(TString& codrfso); // Decodifica il tipo di documento per il trasferimento fatture const char * decodTipo(TToken_string* strarr); // Salvo un singolo record @@ -202,11 +198,6 @@ class TTrFa_mask : public TAutomask protected: virtual void next_page(int p); - const char * natura(const TString& codiva) const; - real get_IVA(const TString& codiva) const; - TString findDetraib(TString tipodet) const; - TString revCharge(TString numreg) const; - TString getRFSO(TString codrfso) const; TRecnotype nuovo_progr() const; void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const; virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); diff --git a/src/tf/tf0101.cpp b/src/tf/tf0101.cpp index e4cbf2417..65d10c53d 100644 --- a/src/tf/tf0101.cpp +++ b/src/tf/tf0101.cpp @@ -494,7 +494,7 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string* rec) coderr << "3;"; } - if(decodTipo(rec) == "ERR") + if(decodTipo(rec) == "ERR0") { ok = false; msgerr.cut(0) << "Non riesco a determinare il tipo di documento corretto per l'agenzia delle entrate!"; @@ -612,8 +612,8 @@ void TTrFa_mask::load_sheet() } //TString key; key << "TIPOA=" << prefix().firm().get("TIPOA")<< ",CODANAGR=" << prefix().firm().get("CODANAGR"); TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR"); - const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV"); - const TString cofiDitta = cache().get(LF_ANAG, key, "COFI"); + static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV"); + static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI"); TTrFa_cursors c; @@ -694,36 +694,6 @@ void TTrFa_mask::load_sheet() sheet.show(); } -TString TTrFa_mask::findDetraib(TString tipodet) const -{ - real perc = cache().get("%DET", tipodet, "R0"); - return perc.stringa(6,2); -} - -const char * TTrFa_mask::natura(const TString& codiva) const -{ - const TRectype& ai = cache().get("%IVA", codiva); - TString & natura = get_tmp_string(4); - - natura = ai.get("S12"); - return natura; -} - -real TTrFa_mask::get_IVA(const TString& codiva) const -{ - const TRectype& ai = cache().get("%IVA", codiva); - return ai.get_real("R0"); -} - -TString TTrFa_mask::revCharge(TString numreg) const -{ - // Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi - TString key = numreg; - TCausale caus(cache().get(LF_MOV, key, "CODCAUS")); - if(caus.reverse_charge()) - bool tolla = true; - return caus.reverse_charge() ? "X" : ""; -} bool TTrFa_mask::checkInvio(const TString& invio) { @@ -744,11 +714,6 @@ bool TTrFa_mask::checkInvio(const TString& invio) return ok; } -TString TTrFa_mask::getRFSO(TString codrfso) const -{ - TString key; key << codrfso[0] << "|" << codrfso.mid(1); - return cache().get(LF_ANAG, key, "RAGSOC"); -} TTrFa_mask::TTrFa_mask(TString msk) : TAutomask(msk), _filter_changed(true) diff --git a/src/tf/tf0400.cpp b/src/tf/tf0400.cpp new file mode 100644 index 000000000..92de7fff7 --- /dev/null +++ b/src/tf/tf0400.cpp @@ -0,0 +1,225 @@ +#include "tf0400a.h" +#include "tfutility.h" + +#include +#include +#include +#include +#include // cache() + + +/**************************************************************************************************** + * TSpeCheck_msk + ****************************************************************************************************/ + +class TSpeCheck_msk : public TAutomask +{ + void fillNoFilter(); + void fillDiff(); + void fillCust(); + void getFilFlag(TString& query); + void enableEdit(bool en); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + TSpeCheck_msk() : TAutomask("tf0400a"){} +}; + +bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch(o.dlg()) + { + case DLG_RECALC: + if(e != fe_button) break; + case F_TIPOCONTROLLO: + { + switch(o.mask().get_long(F_TIPOCONTROLLO)) + { + case 0: + fillNoFilter(); + break; + case 1: + fillDiff(); + break; + case 2: + fillCust(); + default: + break; + } + } + break; + default: + break; + } + return true; +} + +void TSpeCheck_msk::fillNoFilter() +{ + TString query = "USE RMOVIVA\n"; + query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << get(F_TIPOCF) << "\")"; + if(get(F_CODCF) != "") + query << "&&STR((23.CODCF=#CODCF))"; + + getFilFlag(query); +} +void TSpeCheck_msk::fillDiff() +{ + +} +void TSpeCheck_msk::fillCust() +{ + TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR"); + static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV"); + static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI"); + + TString query = "USE TRASFATT\n"; + query << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << get(F_TIPOCF) << "\")"; + if(get(F_CODCF) != "") + query << "&&STR((CODCF=#CODCF))"; + + getFilFlag(query); + + TISAM_recordset rset(query); + + TDate dadatareg = get_date(F_DATAINI); + if(!dadatareg.ok()) + { + dadatareg = TDate(01, 01, 2017); + set(F_DATAINI, dadatareg); + } + + TDate adatareg = get_date(F_DATAFIN); + if(!adatareg.ok()) + { + adatareg = TDate(TODAY); + set(F_DATAFIN, adatareg); + } + + // Setto le variabili + rset.set_var("#DADATAREG", dadatareg); + rset.set_var("#ADATAREG", adatareg); + if(get(F_CODCF) != "") + rset.set_var("#CODCF", get(F_CODCF)); + + int nrec = rset.items(); + + TSheet_field& s = sfield(F_RIGHE); + // Nascondo lo sheet + s.hide(); + + if(!s.empty()) + s.destroy(); + for(bool ok = rset.move_first(); ok; ok = rset.move_next()) + { + TRectype clifo = getCli(rset.get("TIPO").as_string(), rset.get("CODCF").as_string(), rset.get("OCCAS").as_string()); + TToken_string& row = s.row(-1); + + row.add(rset.get("DATAREG").as_string(), s.cid2index(A_DATAREG)); + row.add(rset.get("TIPODOC").as_string(), s.cid2index(A_TIPODOC)); + row.add(rset.get("NUMDOC").as_string(), s.cid2index(A_NUMDOC)); + row.add(rset.get("CODIVA").as_string(), s.cid2index(A_ALIQUOTA)); + row.add(rset.get("IMPONIBILE").as_string(), s.cid2index(A_IMPONIBILE)); + row.add(rset.get("IMPOSTA").as_string(), s.cid2index(A_IMPOSTA)); + // NATURA + row.add(natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA)); + // DETR + row.add(findDetraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB)); + + row.add(rset.get("TIPO").as_string(), s.cid2index(A_TIPOCF)); + row.add(rset.get("CODCF").as_string(), s.cid2index(A_CODCF)); + row.add(rset.get("OCCAS").as_string(), s.cid2index(A_OCFPI)); + // RSOC + row.add(clifo.get("RAGSOC"), s.cid2index(A_RAGSOC)); + // RFSO + row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO)); + // RSOC RFSO + row.add(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); + // RC + row.add((revCharge(rset.get("NUMREG").as_string())), s.cid2index(A_REVERSE)); + // AUTOFATT + if(rset.get("AUTOFATT").as_string() == "X" || pivaDitta == clifo.get("PAIV")) + { + row.add("X", s.cid2index(A_AUTOFATT)); + row.add(pivaDitta, s.cid2index(A_PAIV)); + row.add(cofiDitta, s.cid2index(A_COFI)); + } + else + { + row.add("", s.cid2index(A_AUTOFATT)); // AutoFatt + row.add(clifo.get("PAIV"), s.cid2index(A_PAIV)); // P.IVA + row.add(clifo.get("COFI"), s.cid2index(A_COFI)); // Codice Fiscale + } + row.add(rset.get("TFINVIO").as_string() == "X", s.cid2index(A_SPEDITA)); + row.add(rset.get("NUMREG").as_string(), s.cid2index(A_NUMERO)); + } + s.force_update(); + s.show(); + enableEdit(true); +} + +void TSpeCheck_msk::getFilFlag(TString& query) +{ + switch(get_int(F_FLAG)) + { + case 1: + query << "&&((TFINVIO=\"\")||(TFINVIO=\"X\")||(TFINVIO=\"F\")||(TFINVIO=\"E\"))"; + break; + case 2: + query << "&&(TFINVIO=\"I\")"; + break; + case 3: + query << "&&(TFINVIO=\"N\")"; + case 0: + default: + break; + } +} + +void TSpeCheck_msk::enableEdit(bool en) +{ + // Abilito i bottoni + enable(DLG_SAVEREC,en); + enable(DLG_CANCEL, en); + + TSheet_field& s = sfield(F_RIGHE); + + // Abilito i campi + enable(A_ELIMINA,en); + enable(A_DATAREG,en); + enable(A_TIPODOC,en); + enable(A_NUMDOC,en); + enable(A_DATADOC,en); + enable(A_ALIQUOTA,en); + enable(A_IMPONIBILE,en); + enable(A_IMPOSTA,en); + enable(A_NATURA,en); + enable(A_TIPOCF,en); + enable(A_CODCF,en); + enable(A_OCFPI,en); +} + +/**************************************************************************************************** + * TSpeCheck_app + ****************************************************************************************************/ + +class TSpeCheck_app : public TSkeleton_application +{ +public: + virtual void main_loop(); +}; + +TSpeCheck_app& app() { return (TSpeCheck_app&)main_app(); } + +void TSpeCheck_app::main_loop() +{ + TSpeCheck_msk msk; + msk.run(); +} + + +int tf0400(int argc, char* argv[]) +{ + TSpeCheck_app app; + app.run(argc, argv, TR("Controlli Spesometro")); + return 0; +} \ No newline at end of file diff --git a/src/tf/tf0400a.h b/src/tf/tf0400a.h new file mode 100644 index 000000000..d4fd1464b --- /dev/null +++ b/src/tf/tf0400a.h @@ -0,0 +1,32 @@ +#define F_TIPOCONTROLLO 301 +#define F_FLAG 302 +#define F_DATAINI 303 +#define F_DATAFIN 304 +#define F_CODCF 305 +#define F_TIPOCF 306 +#define F_RAGSOC 307 + +#define F_RIGHE 201 // Sheet righe tf + +#define A_ELIMINA 101 +#define A_DATAREG 102 +#define A_TIPODOC 103 +#define A_NUMDOC 104 +#define A_DATADOC 105 +#define A_ALIQUOTA 106 +#define A_IMPONIBILE 107 +#define A_IMPOSTA 108 +#define A_NATURA 109 +#define A_DETRAIB 110 +#define A_TIPOCF 111 +#define A_CODCF 112 +#define A_OCFPI 113 +#define A_RAGSOC 114 +#define A_RFSO 115 +#define A_RAGSOCRFSO 116 +#define A_PAIV 117 +#define A_COFI 118 +#define A_REVERSE 119 +#define A_AUTOFATT 120 +#define A_SPEDITA 121 +#define A_NUMERO 122 \ No newline at end of file diff --git a/src/tf/tf0400a.uml b/src/tf/tf0400a.uml new file mode 100644 index 000000000..716b15507 --- /dev/null +++ b/src/tf/tf0400a.uml @@ -0,0 +1,289 @@ +#include "tf0400a.h" + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_RECALC 2 2 +BEGIN + PROMPT 1 1 "Aggiorna" + PICTURE TOOL_CONVERT +END + +BUTTON DLG_SAVEREC 2 2 +BEGIN + PROMPT 1 1 "Salva" + PICTURE TOOL_SAVEREC +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 1 1 "Elimina" + PICTURE TOOL_DELREC +END + +#include +ENDPAGE + +PAGE "Controlli Spesometro" 0 2 0 0 + +LIST F_TIPOCONTROLLO 35 35 +BEGIN + PROMPT 1 0 "Controllo da effettuare" + ITEM "0|Movimenti esclusi" + ITEM "1|Differenze Prima Nota/Spesometro" + ITEM "2|Visualizza tutti i movimenti Spesometro" + FLAGS "" +END + +LIST F_FLAG 35 +BEGIN + PROMPT 1 1 "Stato movimento " + ITEM "0|Tutti" + ITEM "1|Da inviare" + ITEM "2|Inviati" + ITEM "3|Disabilitati" + FLAGS "" +END + +DATE F_DATAINI +BEGIN + PROMPT 65 0 "Data iniziale:" + VALIDATE DATE_CMP_FUNC <= F_DATAFIN + WARNING "La data iniziale non può essere maggiore della data finale" +END + +DATE F_DATAFIN +BEGIN + PROMPT 65 1 "Data Finale: " + VALIDATE DATE_CMP_FUNC >= F_DATAINI + WARNING "La data finale non può essere minore della data iniziale" +END + +RADIOBUTTON F_TIPOCF 15 +BEGIN + PROMPT 1 2 "Tipo C/F" + ITEM "C|Cliente" + ITEM "F|Fornitore" +END + +NUMBER F_CODCF 6 +BEGIN + PROMPT 18 3 "Codice:" + USE LF_CLIFO + INPUT TIPOCF F_TIPOCF SELECT + INPUT CODCF F_CODCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Occasionale@C" OCCAS + DISPLAY "Codice Fiscale@16" COFI + DISPLAY "Partita IVA@15" PAIV + OUTPUT F_CODCF CODCF + OUTPUT F_RAGSOC RAGSOC + CHEKTYPE NORMAL + GROUP 1 + FLAGS "" +END + +STRING F_RAGSOC 50 49 +BEGIN + PROMPT 18 5 "R.Soc: " + USE LF_CLIFO KEY 2 + INPUT TIPOCF F_TIPOCF SELECT + INPUT RAGSOC F_RAGSOC + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Codice Fiscale@16" COFI + DISPLAY "Partita IVA@15" PAIV + COPY OUTPUT F_CODCF + ADD RUN CG0 -1 + GROUP 1 + FLAGS "" +END + +SPREADSHEET F_RIGHE +BEGIN + PROMPT 0 8 "Righe movimenti" + ITEM "Elimina@1F" + ITEM "Data\n Reg.@8F" + ITEM "Tipo\nDocum.@2F" + ITEM "Numero\nDocum.@5F" + ITEM "Data\nDocum.@10" + ITEM "Aliquota@4" + ITEM "Imponibile@10" + ITEM "Imposta@10" + ITEM "Natura\nIVA@4" + ITEM "% Detr.@6" + ITEM "C/F@2" + ITEM "Codice@6" + ITEM "Occas.@16" + ITEM "Ragione Sociale@35" + ITEM "RF/SO@16" + ITEM "Rag. Soc. RF/SO@35" + ITEM "Partita IVA@11" + ITEM "Codice Fiscale@15" + ITEM "Rev.\nCharge@4" + ITEM "Auto\nfatt.@3" + ITEM "Spedita@5" + ITEM "N.\nRegistraz.@10" + DEFAULT "*" // Impedisce il salvataggio su profilo .ini +END + +ENDPAGE +ENDMASK + +PAGE "Riga" -1 -1 69 14 +BOOLEAN A_ELIMINA +BEGIN + PROMPT 52 10 "Elimina" + FIELD SPEDITA + FLAGS "D" +END + +BOOLEAN A_SPEDITA +BEGIN + PROMPT 52 10 "Gia' spedita" + FIELD SPEDITA + FLAGS "D" +END + +NUMBER A_NUMERO 10 +BEGIN + PROMPT 1 0 "N.Movimento" + FLAGS "D" + FIELD PROGR +END + +DATE A_DATAREG +BEGIN + PROMPT 26 0 "Data reg." + FIELD DATAREG + FLAGS "D" +END + +STRING A_TIPOCF 1 +BEGIN + PROMPT 1 1 "Tipo C/F " + FIELD TIPOCF + FLAGS "D" +END + +NUMBER A_CODCF 6 +BEGIN + PROMPT 26 1 "Cod. C/F" + FIELD CODCF + FLAGS "D" +END + +STRING A_OCFPI 16 +BEGIN + PROMPT 44 1 "Occas." + FIELD OCFPI + FLAGS "D" +END + +STRING A_RAGSOC 50 47 +BEGIN + FIELD RAGSOC + PROMPT 1 2 "Ragione Sociale" + FLAGS "D" +END + +STRING A_RFSO 6 +BEGIN + FIELD RFSO + PROMPT 1 4 "Codice RF/SO: " + HELP "Codice Rappresentante Fiscale o Stabile Organizzazione" + FLAGS "D" +END + +STRING A_RAGSOCRFSO 50 47 +BEGIN + FIELD RAGSOCRFSO + PROMPT 1 5 "Rag. Soc. RF/SO" + HELP "Ragione Sociale RF/SO" + FLAGS "D" +END + +STRING A_TIPODOC 2 +BEGIN + PROMPT 23 6 "Tipo doc. " + FIELD TIPODOC + FLAGS "D" +END + +STRING A_NUMDOC 7 +BEGIN + PROMPT 42 6 "Num. doc. " + FIELD NUMDOC + FLAGS "D" +END + +DATE A_DATADOC +BEGIN + PROMPT 1 6 "Data doc." + FIELD DATADOC + FLAGS "D" +END + +STRING A_NATURA 2 +BEGIN + PROMPT 20 7 "Natura IVA" + FIELD S12 + FLAGS "D" +END + +STRING A_ALIQUOTA 4 +BEGIN + PROMPT 1 7 "Aliquota " + HELP "Codice aliquota" + FIELD CODTAB + FLAGS "D" +END + +STRING A_DETRAIB 6 +BEGIN + PROMPT 1 8 "% Detraibilita'" + HELP "Percentuale di detraibilita'" + FLAGS "D" +END + +NUMBER A_IMPONIBILE 12 2 +BEGIN + PROMPT 42 8 "Imponibile" + FIELD IMPORTO + FLAGS "D" +END + +NUMBER A_IMPOSTA 12 2 +BEGIN + PROMPT 42 9 "Imposta " + FIELD IMPOSTA + FLAGS "D" +END + +BOOLEAN A_REVERSE +BEGIN + PROMPT 1 9 "Reverse charge" + FIELD REVERSE + FLAGS "D" +END + +BOOLEAN A_AUTOFATT +BEGIN + PROMPT 25 9 "Autofattura" + FIELD AUTOFATT + FLAGS "D" +END + +STRING A_PAIV 12 +BEGIN + PROMPT 1 3 "Partita IVA " + FLAGS "D" +END + +STRING A_COFI 16 +BEGIN + PROMPT 33 3 "Codice Fiscale" + FLAGS "D" +END + +ENDMASK \ No newline at end of file diff --git a/src/tf/tfmenu.men b/src/tf/tfmenu.men index d263dc728..ac5ba6d8b 100644 --- a/src/tf/tfmenu.men +++ b/src/tf/tfmenu.men @@ -4,5 +4,6 @@ Picture = Module = tf Flags = "" Item_01 = "Trasferimento Fatture", "tf0 -0", "" -Item_02 = "Liquidazione IVA Periodica", "tf0 -1", "" -Item_03 = "Invio Liquidazione IVA Periodica", "tf0 -4", "" +Item_02 = "Controllo Spesometro", "tf0 -3", "" +Item_03 = "Liquidazione IVA Periodica", "tf0 -1", "" +Item_04 = "Invio Liquidazione IVA Periodica", "tf0 -4", "" diff --git a/src/tf/tfutility.cpp b/src/tf/tfutility.cpp new file mode 100644 index 000000000..eb2d6cd06 --- /dev/null +++ b/src/tf/tfutility.cpp @@ -0,0 +1,78 @@ +#include // cache() + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" +#include "../fe/felib.h" +#include "tfutility.h" + + +// Ritorna il record da trasfatt +TRectype getTrasFatt(TString reg, TString codiva) +{ + TString key = reg; key << "|" << codiva; + return cache().get(LF_TRASFATT, key); +} + +// Ritorna il cliente +TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi) +{ + TString key = tipocf; key << "|" << codcf; + const TRectype& cli = cache().get(LF_CLIFO, key); + if(cli.get_bool("OCCAS")) + { + TRectype cli(LF_CLIFO); + TRectype occas = cache().get(LF_OCCAS, ocfpi); + cli.put("RAGSOC" , occas.get("RAGSOC")); + cli.put("CODRFSO" , ""); + cli.put("PAIV" , occas.get("PAIV")); + cli.put("COFI" , occas.get("COFI")); + return cli; + } + else + return cli; +} + +// Controlla se l'azienda ha un RFSO +bool haveRFSO(TString& codrfso) +{ + codrfso = cache().get(LF_NDITTE, prefix().firm().codice(), "CODRFSO"); + if(codrfso == "") return false; + return true; +} + +const char * natura(const TString& codiva) +{ + const TRectype& ai = cache().get("%IVA", codiva); + TString & natura = get_tmp_string(4); + + natura = ai.get("S12"); + return natura; +} + +TString findDetraib(TString tipodet) +{ + real perc = cache().get("%DET", tipodet, "R0"); + return perc.stringa(6,2); +} + +real get_IVA(const TString& codiva) +{ + const TRectype& ai = cache().get("%IVA", codiva); + return ai.get_real("R0"); +} + +TString revCharge(TString numreg) +{ + // Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi + TString key = numreg; + TCausale caus(cache().get(LF_MOV, key, "CODCAUS")); + if(caus.reverse_charge()) + bool tolla = true; + return caus.reverse_charge() ? "X" : ""; +} + +TString getRFSO(TString codrfso) +{ + TString key; key << codrfso[0] << "|" << codrfso.mid(1); + return cache().get(LF_ANAG, key, "RAGSOC"); +} \ No newline at end of file diff --git a/src/tf/tfutility.h b/src/tf/tfutility.h new file mode 100644 index 000000000..8ba112d49 --- /dev/null +++ b/src/tf/tfutility.h @@ -0,0 +1,21 @@ +#include +#include + +// Funzioni comode per più programmi + +// Ritorna il record custom +TRectype getTrasFatt(TString reg, TString codiva); +// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas +TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi); +// Controlla se l'azienda ha un RFSO +bool haveRFSO(TString& codrfso); +// Ritorna la natura da un codice IVA +const char * natura(const TString& codiva); +// Ritorna l'IVA +real get_IVA(const TString& codiva); +// Ritorna la % di detraibilità +TString findDetraib(TString tipodet); +// Ritorna "X" se ha il reverse charge +TString revCharge(TString numreg); +// Ritorna la ragione sociale del RFSO +TString getRFSO(TString codrfso); \ No newline at end of file