diff --git a/src/ps/ps0713800.cpp b/src/ps/ps0713800.cpp index 3e7304cf0..d458a8386 100644 --- a/src/ps/ps0713800.cpp +++ b/src/ps/ps0713800.cpp @@ -23,8 +23,10 @@ class TEsportaIva_msk : public TAutomask bool test_partita(const long numreg, TDate& last_data_pag, const TDate& data) const; void fill(); public: - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - bool testFields() const; + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + bool testFields() const; + TISAM_recordset createRecset() const; + TDate getDataTest() const; TEsportaIva_msk(); }; @@ -32,12 +34,18 @@ public: bool TEsportaIva_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) - { + { + case F_PATH: + if (e == fe_init) + o.set(ini_get_string(CONFIG_DITTA, "Esporta_Dati_IVA", "Path")); + break; +/* case F_DADATA: if (e == fe_init) o.set(ini_get_string(CONFIG_DITTA, "Esporta_Dati_IVA", "LastSend", "01-01-2017")); break; - case F_ADATA: +*/ + //case F_ADATA: case F_CODCF: if (e == fe_modify || e == fe_close) createName(); @@ -77,16 +85,16 @@ bool TEsportaIva_msk::on_field_event(TOperable_field& o, TField_event e, long jo void TEsportaIva_msk::createName() { //setto il campo F_NAME a un valore fisso, e cioè: "CODF_data.txt" - TDate adata = get_date(F_ADATA); + TDate today(TODAY); TString name; if(get(F_CODCF).full()) name << get(F_CODCF); - if(get(F_CODCF).full() && adata.ok()) // Solo se ci sono entrambi, sennò farebbe schifo + if(get(F_CODCF).full() && today.ok()) // Solo se ci sono entrambi, sennò farebbe schifo name << "_"; - if(adata.ok()) - name << adata.date2ansi(); + if(today.ok()) + name << today.date2ansi(); if(name.full()) // Capita che venga chiamato per eliminare name << ".txt"; set(F_NAME, name); @@ -95,11 +103,6 @@ void TEsportaIva_msk::createName() bool TEsportaIva_msk::testFields() const { // Controllo presenza campi - if(!get_date(F_ADATA).ok() || !get_date(F_DADATA).ok()) - { - warning_box("Controllare le date"); - return false; - } if(!get_bool(B_PRTAPE) && !get_bool(B_PRTCHIU)) { warning_box("Selezionare almeno un tipo di partita!"); @@ -113,6 +116,85 @@ bool TEsportaIva_msk::testFields() const return true; } +TISAM_recordset TEsportaIva_msk::createRecset() const +{ + // Eseguo un controllo sulle date + TDate daDReg = get_date(F_DADATAREG), aDReg = get_date(F_ADATAREG); + if(!aDReg.ok()) + { + aDReg = TDate(TODAY); + } + if(!daDReg.ok()) + { + daDReg = TDate(01,01,1990); + } + TDate daDFatt = get_date(F_DADATAFATT), aDFatt = get_date(F_ADATAFATT); + if(!aDFatt.ok()) + { + aDFatt = TDate(TODAY); + } + if(!daDFatt.ok()) + { + daDFatt = TDate(01,01,1990); + } + + // Preparo query su righe iva joinati ai mov + TString query("USE RMOVIVA SELECT "); + if(daDReg.ok() && aDReg.ok()) // Se almeno una delle due è stata impostata con i controlli di sopra dovrebbero essere tutte e due OK + { + query << "BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&"; + } + if(daDFatt.ok() && aDFatt.ok()) + { + query << "BETWEEN(23.DATADOC,#DADATAFATT,#ADATAFATT)&&"; + } + + query << "(23.INVIVA!=\"X\")&&(23.TIPO=\"F\")"; + + if(get_bool(B_FORNITORE)) + { + query << "&&(23.CODCF=#CODCF)"; + } + + query << "\n"; + + query << "JOIN MOV INTO NUMREG==NUMREG\n" + << "JOIN %IVA ALIAS 101 INTO CODTAB==CODIVA\n" + << "JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; + + // Instanzio il recordset + TISAM_recordset recset(query); + if(daDReg.ok() && aDReg.ok()) + { + recset.set_var("#DADATAREG", daDReg); + recset.set_var("#ADATAREG", aDReg); + } + if(daDFatt.ok() && aDFatt.ok()) + { + recset.set_var("#DADATAFATT", daDFatt); + recset.set_var("#ADATAFATT", aDFatt); + } + if(get_bool(B_FORNITORE)) + { + recset.set_var("#CODCF", get(F_CODCF)); + } + + return recset; +} + +TDate TEsportaIva_msk::getDataTest() const +{ + if(get_date(F_ADATAREG).ok()) + { + return get_date(F_ADATAREG); + } + else if(get_date(F_ADATAFATT).ok()) + { + return get_date(F_ADATAFATT); + } + return TDate(TODAY); +} + //TEST_PARTITA: metodo che cerca l'ultima data pagamento delle partite relative ad un numreg (la maggiore) //il metodo restiruisce true se esiste almeno una partita per il numreg indicato bool TEsportaIva_msk::test_partita(const long numreg, TDate& last_data_pag, const TDate& data) const @@ -151,34 +233,11 @@ void TEsportaIva_msk::fill() if(!testFields()) return; - // Preparo le date di interesse - bool datadoc = get_int(F_DATASEL) == 1; - - // Preparo query su righe iva joinati ai mov - TString query("USE RMOVIVA SELECT "); - if(datadoc) - { - query << "BETWEEN(23.DATAREG,#DADATA,#ADATA)&&"; - } - - query << "(23.INVIVA!=\"X\")&&(23.TIPO=\"F\")"; - query << "\n"; - bool with_cms = get_int(F_JOB) == 1; + // Controllo che data mettere per partita chiusa + TDate dataTest = getDataTest(); - query << "JOIN MOV INTO NUMREG==NUMREG\n" - << "JOIN %IVA ALIAS 101 INTO CODTAB==CODIVA\n" - << "JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; - - //instanzio il recordset - TISAM_recordset rmoviva(query); - if(datadoc) - { - rmoviva.set_var("#DADATA", get_date(F_DADATA)); - rmoviva.set_var("#ADATA", get_date(F_ADATA)); - } - if(get_bool(B_FORNITORE)) - rmoviva.set_var("#CODCF", get(F_CODCF)); + TISAM_recordset rmoviva = createRecset(); TSheet_field& sheet = sfield(S_RESULT); TString_array& strarr = sheet.rows_array(); @@ -194,6 +253,8 @@ void TEsportaIva_msk::fill() if (!pi.add_status()) break; + if(get_bool(B_SOLRITFIS) && rmoviva.get("23.RITFIS").as_real() <= ZERO) continue; + TCursor* i = rmoviva.cursor(); int k = i->pos(); @@ -201,9 +262,9 @@ void TEsportaIva_msk::fill() const long numreg = rmoviva.get(RMI_NUMREG).as_int(); // Da fare sempre o last_data_pag non viene valorizzato - bool partita_chiusa = test_partita(numreg, last_data_pag, datadoc ? get_date(F_ADATA) : TDate(TODAY)); + bool partita_chiusa = test_partita(numreg, last_data_pag, dataTest); - if(!datadoc && (last_data_pag < get_date(F_DADATA) || get_date(F_ADATA) < last_data_pag || !last_data_pag.ok())) continue; + //if(!datadoc && (last_data_pag < get_date(F_DADATA) || get_date(F_ADATA) < last_data_pag || !last_data_pag.ok())) continue; if (all || (get_bool(B_PRTAPE) && !partita_chiusa) || (get_bool(B_PRTCHIU) && partita_chiusa)) { @@ -229,6 +290,7 @@ void TEsportaIva_msk::fill() TImporto importo(sez, rmovana.get_real("IMPORTO")); importo.normalize('D'); row.add(importo.valore()); + row.add(rmoviva.get("23.RITFIS").as_real()); row.add(rmoviva.get("23.DATADOC").as_string()); row.add(rmoviva.get("23.NUMDOC").as_string()); row.add(last_data_pag); @@ -258,7 +320,8 @@ void TEsportaIva_msk::fill() row.add(codcms, 0); row.add(rmoviva.get("23.CODCF").as_string()); row.add(rmoviva.get("20.RAGSOC").as_string()); - row.add(rmoviva.get(RMI_IMPONIBILE).as_real()); + row.add(rmoviva.get(RMI_IMPONIBILE).as_real()); + row.add(rmoviva.get("23.RITFIS").as_real()); row.add(rmoviva.get("23.DATADOC").as_string()); row.add(rmoviva.get("23.NUMDOC").as_string()); row.add(last_data_pag); @@ -276,7 +339,8 @@ void TEsportaIva_msk::fill() row.add("", 0); row.add(rmoviva.get("23.CODCF").as_string()); row.add(rmoviva.get("20.RAGSOC").as_string()); - row.add(rmoviva.get(RMI_IMPONIBILE).as_real()); + row.add(rmoviva.get(RMI_IMPONIBILE).as_real()); + row.add(rmoviva.get("23.RITFIS").as_real()); row.add(rmoviva.get("23.DATADOC").as_string()); row.add(rmoviva.get("23.NUMDOC").as_string()); row.add(last_data_pag); @@ -370,66 +434,41 @@ void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const if(!m.testFields()) return; - //instanzio il TFilename e controllo la sua esistenza - TFilename path = m.get(F_PATH); - path.add(m.get(F_NAME)); - if (path.exist()) - { - TString str; - str << "ATTENZIONE! " << "Il file " << m.get(F_NAME) << "è già esistente.\n" - << "Se si procede sara' azzerato il file esistente!\nContinuare?"; - if (!yesno_box(str)) - return; + // Instanzio il TFilename e controllo la sua esistenza + TFilename path = m.get(F_PATH); + path.add(m.get(F_NAME)); + if (path.exist()) + { + TString str; + str << "ATTENZIONE! " << "Il file " << m.get(F_NAME) << "è già esistente.\n" + << "Se si procede sara' azzerato il file esistente!\nContinuare?"; + if (!yesno_box(str)) + return; } - //preparo le date di interesse - bool datadoc = m.get_int(F_DATASEL) == 1; - - // Preparo query su righe iva joinati ai mov - TString query("USE RMOVIVA SELECT "); - if(datadoc) - { - query << "BETWEEN(23.DATAREG,#DADATA,#ADATA)&&"; - } - - query << "(23.INVIVA!=\"X\")&&(23.TIPO=\"F\")"; - - if(m.get_bool(B_FORNITORE)) - { - query << "&&(23.CODCF=#CODCF)"; - } - query << "\n"; - bool with_cms = m.get_int(F_JOB) == 1; - - query << "JOIN MOV INTO NUMREG==NUMREG\n" - << "JOIN %IVA ALIAS 101 INTO CODTAB==CODIVA\n" - << "JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; - - //instanzio il recordset - TISAM_recordset rmoviva(query); - if(datadoc) - { - rmoviva.set_var("#DADATA", m.get_date(F_DADATA)); - rmoviva.set_var("#ADATA", m.get_date(F_ADATA)); - } + // Controllo che data mettere per partita chiusa + TDate dataTest = m.getDataTest(); + TISAM_recordset rmoviva = m.createRecset(); //instanzio il csv recordset - TEsportaIva_rec csv; + TEsportaIva_rec csv; bool all = m.get_bool(B_PRTAPE) && m.get_bool(B_PRTCHIU); TProgress_monitor pi(rmoviva.items(), TR("Estrazione dati...")); for (bool ok = rmoviva.move_first(); ok && !pi.is_cancelled(); ok = rmoviva.move_next()) { - if (!pi.add_status()) - break; + if (!pi.add_status()) + break; + + if(m.get_bool(B_SOLRITFIS) && rmoviva.get("23.RITFIS").as_real() <= ZERO) continue; TDate last_data_pag; - const long numreg = rmoviva.get(RMI_NUMREG).as_int(); + const long numreg = rmoviva.get(RMI_NUMREG).as_int(); // Da fare sempre o last_data_pag non viene valorizzato - bool partita_chiusa = test_partita(numreg, last_data_pag, datadoc ? m.get_date(F_ADATA) : TDate(TODAY)); + bool partita_chiusa = test_partita(numreg, last_data_pag, dataTest); - if(!datadoc && last_data_pag < m.get_date(F_DADATA) && m.get_date(F_ADATA) < last_data_pag) continue; + //if(!datadoc && last_data_pag < m.get_date(F_DADATA) && m.get_date(F_ADATA) < last_data_pag) continue; if (all || (m.get_bool(B_PRTAPE) && !partita_chiusa) || (m.get_bool(B_PRTCHIU) && partita_chiusa)) { @@ -454,7 +493,8 @@ void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const char sez = rmovana.get_char("SEZIONE"); TImporto importo(sez, rmovana.get_real("IMPORTO")); importo.normalize('D'); - csv.set(3, importo.valore()); + csv.set(3, importo.valore()); + csv.set(4, rmoviva.get("23.RITFIS").as_real()); csv.set(6, rmoviva.get("23.DATADOC")); csv.set(7, rmoviva.get("23.NUMDOC")); csv.set(8, last_data_pag); @@ -484,6 +524,7 @@ void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const csv.set(1, rmoviva.get("23.CODCF")); csv.set(2, rmoviva.get("20.RAGSOC")); csv.set(3, rmoviva.get(RMI_IMPONIBILE).as_real()); + csv.set(4, rmoviva.get("23.RITFIS").as_real()); csv.set(6, rmoviva.get("23.DATADOC")); csv.set(7, rmoviva.get("23.NUMDOC")); csv.set(8, last_data_pag); @@ -500,7 +541,8 @@ void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const csv.set(0, ""); csv.set(1, rmoviva.get("23.CODCF")); csv.set(2, rmoviva.get("20.RAGSOC")); - csv.set(3, rmoviva.get(RMI_IMPONIBILE).as_real()); + csv.set(3, rmoviva.get(RMI_IMPONIBILE).as_real()); + csv.set(4, rmoviva.get("23.RITFIS").as_real()); csv.set(6, rmoviva.get("23.DATADOC")); csv.set(7, rmoviva.get("23.NUMDOC")); csv.set(8, last_data_pag); @@ -517,12 +559,13 @@ void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const #endif TString msg; - msg << TR("Si conferma l'esportazione definitiva dei movimenti IVA fino al ") << m.get(F_ADATA); + msg << TR("Si conferma l'esportazione definitiva dei movimenti IVA fino al ") << dataTest; if (m.get_bool(B_PRTCHIU) && yesno_box(msg)) - set_inviva(rmoviva, datadoc ? m.get_date(F_ADATA) : TDate(TODAY)); //mette il flag di "INVIVA" alla testata movimento + set_inviva(rmoviva, dataTest); //mette il flag di "INVIVA" alla testata movimento // Salvo su file le impostazioni - ini_set_string(CONFIG_DITTA, "Esporta_Dati_IVA", "LastSend", m.get_date(F_DADATA)); + //ini_set_string(CONFIG_DITTA, "Esporta_Dati_IVA", "LastSend", m.get_date(F_DADATA)); + ini_set_string(CONFIG_DITTA, "Esporta_Dati_IVA", "Path", m.get(F_PATH)); } //SET_INVIA: metodo che mette il flag di "INVIVA" alla testata movimento diff --git a/src/ps/ps0713800a.h b/src/ps/ps0713800a.h index 8969f09c3..dbd1c199c 100644 --- a/src/ps/ps0713800a.h +++ b/src/ps/ps0713800a.h @@ -1,25 +1,28 @@ //campi maschera ps0713800a -#define A_IDLAVORO 101 -#define A_CODF 102 -#define A_RAGSOC 103 -#define A_IMPORTO 104 -#define A_DATADOC 105 -#define A_NUMDOC 106 -#define A_DATAPAG 107 -#define A_GRUPPO 108 -#define A_CONTO 109 -#define A_SOTTOCONTO 110 +#define A_IDLAVORO 101 +#define A_CODF 102 +#define A_RAGSOC 103 +#define A_IMPORTO 104 +#define A_RITFIS 105 +#define A_DATADOC 106 +#define A_NUMDOC 107 +#define A_DATAPAG 108 +#define A_GRUPPO 109 +#define A_CONTO 110 +#define A_SOTTOCONTO 111 -#define F_PATH 201 -#define F_NAME 202 -#define F_DADATA 203 -#define F_ADATA 204 -#define F_JOB 205 -#define F_DATASEL 206 -#define B_FORNITORE 207 -#define F_CODCF 208 -#define F_RAGSOC 209 -#define B_PRTAPE 210 -#define B_PRTCHIU 211 +#define F_PATH 201 +#define F_NAME 202 +#define F_DADATAREG 203 +#define F_ADATAREG 204 +#define F_DADATAFATT 205 +#define F_ADATAFATT 206 +#define F_JOB 207 +#define B_FORNITORE 208 +#define F_CODCF 209 +#define F_RAGSOC 210 +#define B_PRTAPE 211 +#define B_PRTCHIU 212 +#define B_SOLRITFIS 213 -#define S_RESULT 301 \ No newline at end of file +#define S_RESULT 301 \ No newline at end of file diff --git a/src/ps/ps0713800a.msk b/src/ps/ps0713800a.msk index 72c333815..895a4c5ce 100644 --- a/src/ps/ps0713800a.msk +++ b/src/ps/ps0713800a.msk @@ -44,28 +44,38 @@ BEGIN FIELD NAME END -DATE F_DADATA +DATE F_DADATAREG BEGIN - PROMPT 0 2 "Da data " - CHECKTYPE REQUIRED + PROMPT 0 2 "Da data Reg. " FIELD ADATA END -DATE F_ADATA +DATE F_ADATAREG BEGIN - PROMPT 20 2 "A data " - CHECKTYPE REQUIRED + PROMPT 25 2 "A data Reg. " + FIELD ADATA +END + +DATE F_DADATAFATT +BEGIN + PROMPT 0 3 "Da data Fatt." + FIELD ADATA +END + +DATE F_ADATAFATT +BEGIN + PROMPT 25 3 "A data Fatt." FIELD ADATA END BOOLEAN B_FORNITORE BEGIN - PROMPT 0 3 "Fornitore" + PROMPT 0 4 "Fornitore" END NUMBER F_CODCF 6 BEGIN - PROMPT 14 3 "Codice:" + PROMPT 14 4 "Codice:" USE LF_CLIFO INPUT TIPOCF "F" SELECT INPUT CODCF F_CODCF @@ -83,7 +93,7 @@ END STRING F_RAGSOC 50 30 BEGIN - PROMPT 30 3 "R.Soc: " + PROMPT 30 4 "R.Soc: " USE LF_CLIFO KEY 2 INPUT TIPOCF "F" SELECT INPUT RAGSOC F_RAGSOC @@ -99,25 +109,22 @@ END BOOLEAN B_PRTAPE BEGIN - PROMPT 0 4 "Partita aperta" + PROMPT 0 5 "Partita aperta" END BOOLEAN B_PRTCHIU BEGIN - PROMPT 20 4 "Partita chiusa" + PROMPT 20 5 "Partita chiusa" END -RADIOBUTTON F_DATASEL 15 +BOOLEAN B_SOLRITFIS BEGIN - PROMPT 70 2 "Data doc/pag" - ITEM "1|Doc." - ITEM "2|Pag" - FLAGS "Z" + PROMPT 40 5 "Solo Ritenute Fiscali" END -RADIOBUTTON F_JOB 12 +RADIOBUTTON F_JOB 15 BEGIN - PROMPT 90 2 "ID lavoro" + PROMPT 70 2 "ID lavoro" ITEM "1|SI" ITEM "2|NO" FLAGS "Z" @@ -125,11 +132,12 @@ END SPREADSHEET S_RESULT BEGIN - PROMPT 0 5 "" + PROMPT 0 6 "" ITEM "ID Lavoro@10" ITEM "Cod.\nFornitore@8" ITEM "Rag. Soc.@30" ITEM "Importo@10" + ITEM "Rit.Fis@10" ITEM "Data\ndocumento@10" ITEM "Numero\ndocumento@10" ITEM "Data pagamento@10" @@ -172,6 +180,13 @@ BEGIN FIELD PROGR END +NUMBER A_RITFIS 18 3 +BEGIN + PROMPT 1 0 "Ritenute Fiscali" + FLAGS "D" + FIELD PROGR +END + DATE A_DATADOC BEGIN PROMPT 1 0 "Data Documento"