Files correlati : Commento : Sistemato controllo regimi speciali iva git-svn-id: svn://10.65.10.50/branches/R_10_00@23872 c028cbd2-c16b-5b4b-a496-9718f37d4682
948 lines
28 KiB
C++
948 lines
28 KiB
C++
#include <applicat.h>
|
||
#include <automask.h>
|
||
#include <progind.h>
|
||
#include <textset.h>
|
||
|
||
#include <mov.h>
|
||
#include <rmoviva.h>
|
||
|
||
#include "../ca/calib01.h"
|
||
#include "../ca/calib02.h"
|
||
#include "../cg/cgsaldac.h"
|
||
|
||
#include "ps0713800a.h"
|
||
|
||
|
||
/* Utility */
|
||
|
||
bool regSpec(TString codcaus)
|
||
{
|
||
return cache().get(LF_CAUSALI, codcaus, "REGSPIVA") == "X";
|
||
}
|
||
|
||
|
||
///////////////////////////////////
|
||
//// TEsportaIva_msk ////
|
||
///////////////////////////////////
|
||
|
||
//Classe TEsportaIva_msk
|
||
class TEsportaIva_msk : public TAutomask
|
||
{
|
||
void createName();
|
||
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;
|
||
TISAM_recordset createRecset() const;
|
||
TDate getDataTest() const;
|
||
TEsportaIva_msk();
|
||
};
|
||
|
||
//ON_FIELD_EVENT: metodo che gestisce i comportamenti dei vari campi della maschera
|
||
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_DACODCF:
|
||
if (e == fe_modify || e == fe_close)
|
||
createName();
|
||
break;
|
||
case F_ACODCF:
|
||
if (e == fe_modify || e == fe_close)
|
||
createName();
|
||
break;
|
||
case B_DAFORNITORE:
|
||
if(e != fe_init)
|
||
{
|
||
if(get_bool(B_DAFORNITORE))
|
||
{
|
||
enable(F_DACODCF);
|
||
enable(F_DARAGSOC);
|
||
}
|
||
else
|
||
{
|
||
disable(F_DACODCF);
|
||
disable(F_DARAGSOC);
|
||
set(F_DACODCF, "");
|
||
set(F_DARAGSOC, "");
|
||
createName();
|
||
}
|
||
}
|
||
break;
|
||
case B_AFORNITORE:
|
||
if(e != fe_init)
|
||
{
|
||
if(get_bool(B_AFORNITORE))
|
||
{
|
||
enable(F_ACODCF);
|
||
enable(F_ARAGSOC);
|
||
}
|
||
else
|
||
{
|
||
disable(F_ACODCF);
|
||
disable(F_ARAGSOC);
|
||
set(F_ACODCF, "");
|
||
set(F_ARAGSOC, "");
|
||
createName();
|
||
}
|
||
}
|
||
break;
|
||
case B_DAGCS:
|
||
if(get_bool(B_DAGCS))
|
||
{
|
||
enable(F_DAGRUPPO);
|
||
enable(F_DACONTO);
|
||
enable(F_DASOTTOCONTO);
|
||
}
|
||
else
|
||
{
|
||
disable(F_DAGRUPPO);
|
||
disable(F_DACONTO);
|
||
disable(F_DASOTTOCONTO);
|
||
set(F_DAGRUPPO, "");
|
||
set(F_DACONTO, "");
|
||
set(F_DASOTTOCONTO, "");
|
||
|
||
}
|
||
break;
|
||
case B_AGCS:
|
||
if(get_bool(B_AGCS))
|
||
{
|
||
enable(F_AGRUPPO);
|
||
enable(F_ACONTO);
|
||
enable(F_ASOTTOCONTO);
|
||
}
|
||
else
|
||
{
|
||
disable(F_AGRUPPO);
|
||
disable(F_ACONTO);
|
||
disable(F_ASOTTOCONTO);
|
||
set(F_AGRUPPO, "");
|
||
set(F_ACONTO, "");
|
||
set(F_ASOTTOCONTO, "");
|
||
|
||
}
|
||
break;
|
||
case B_PRTAPE:
|
||
if(e == fe_init)
|
||
{
|
||
set(B_PRTAPE, "X");
|
||
set(B_PRTCHIU, "X");
|
||
set(B_SOLNONINV, "X");
|
||
}
|
||
break;
|
||
case DLG_RECALC:
|
||
if (e != fe_init)
|
||
{
|
||
fill();
|
||
}
|
||
break;
|
||
default: break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void TEsportaIva_msk::createName()
|
||
{
|
||
//setto il campo F_NAME a un valore fisso, e cio<69>: "CODF_data.txt"
|
||
TDate today(TODAY);
|
||
TString name;
|
||
if(get(F_DACODCF).full())
|
||
name << get(F_DACODCF);
|
||
|
||
if(get(F_DACODCF).full() && (today.ok() || get(F_ACODCF).full())) // Solo se ci sono entrambi, senn<6E> farebbe schifo
|
||
name << "_";
|
||
|
||
if(get(F_ACODCF).full())
|
||
name << get(F_ACODCF);
|
||
|
||
if(get(F_ACODCF).full() && today.ok()) // Solo se ci sono entrambi, senn<6E> farebbe schifo
|
||
name << "_";
|
||
|
||
if(today.ok())
|
||
name << today.date2ansi();
|
||
if(name.full()) // Capita che venga chiamato per eliminare
|
||
name << ".txt";
|
||
set(F_NAME, name);
|
||
}
|
||
|
||
bool TEsportaIva_msk::testFields() const
|
||
{
|
||
bool ok = true;
|
||
// Controllo presenza campi
|
||
if(!get_bool(B_PRTAPE) && !get_bool(B_PRTCHIU))
|
||
{
|
||
warning_box("Selezionare almeno un tipo di partita!");
|
||
ok = false;
|
||
}
|
||
if(get_bool(B_DAFORNITORE) && get(F_DACODCF).empty())
|
||
{
|
||
warning_box("Valorizzare \"Da fornitore\" o togliere il filtro!");
|
||
ok = false;
|
||
}
|
||
if(get_bool(B_AFORNITORE) && get(F_ACODCF).empty())
|
||
{
|
||
warning_box("Valorizzare \"A fornitore\" o togliere il filtro!");
|
||
ok = false;
|
||
}
|
||
if(get_bool(B_DAGCS) && get(F_DAGRUPPO).empty() && get(F_DACONTO).empty() && get(F_DASOTTOCONTO).empty())
|
||
{
|
||
warning_box("Valorizzare almeno uno dei campi \"Da gruppo\", \"Da conto\", \"Da sottoconto\" o togliere il filtro!");
|
||
ok = false;
|
||
}
|
||
if(get_bool(B_AGCS) && get(F_AGRUPPO).empty() && get(F_ACONTO).empty() && get(F_ASOTTOCONTO).empty())
|
||
{
|
||
warning_box("Valorizzare almeno uno dei campi \"A gruppo\", \"A conto\", \"A sottoconto\" o togliere il filtro!");
|
||
ok = false;
|
||
}
|
||
if(get_real(F_AIMPORTO) != ZERO && get_real(F_DAIMPORTO) > get_real(F_AIMPORTO))
|
||
{
|
||
warning_box("Valore immesso in \"A importo\" <20> maggiore rispetto al valore in \"Da importo\"");
|
||
ok = false;
|
||
}
|
||
return ok;
|
||
}
|
||
|
||
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() && daDFatt.ok()) // Sistemo le date solo se mi ha messo il filtro complementare
|
||
{
|
||
aDFatt = TDate(TODAY);
|
||
}
|
||
if(!daDFatt.ok() && aDFatt.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 <20> 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)&&";
|
||
}
|
||
|
||
if(get_bool(B_SOLNONINV))
|
||
{
|
||
query << "(23.INVIVA!=\"X\")&&";
|
||
}
|
||
|
||
query << "(23.TIPO=\"F\")";
|
||
|
||
if(get_bool(B_DAFORNITORE) && get_bool(B_AFORNITORE))
|
||
{
|
||
query << "&&STR((23.CODCF>=#DACODCF))&&STR((23.CODCF<=#ACODCF))";
|
||
}
|
||
else if(get_bool(B_DAFORNITORE))
|
||
{
|
||
query << "&&(23.CODCF=#DACODCF)";
|
||
}
|
||
else if(get_bool(B_AFORNITORE))
|
||
{
|
||
query << "&&(23.CODCF=#ACODCF)";
|
||
}
|
||
|
||
bool nolav = get_int(F_JOB) != 1;
|
||
|
||
if(nolav)
|
||
{
|
||
|
||
/* Gruppo *************************************************************/
|
||
|
||
if(get_int(F_DAGRUPPO) > 0 && get_int(F_AGRUPPO) > 0)
|
||
{
|
||
query << "&&STR((25.GRUPPO>=#DAGRUPPO))&&STR((25.GRUPPO<=#AGRUPPO))";
|
||
}
|
||
else if(get_int(F_DAGRUPPO) > 0)
|
||
{
|
||
query << "&&(25.GRUPPO=#DAGRUPPO)";
|
||
}
|
||
else if(get_int(F_AGRUPPO) > 0)
|
||
{
|
||
query << "&&(25.GRUPPO=#AGRUPPO)";
|
||
}
|
||
|
||
/* Conto *************************************************************/
|
||
|
||
if(get_int(F_DACONTO) > 0 && get_int(F_ACONTO) > 0)
|
||
{
|
||
query << "&&STR((25.CONTO>=#DACONTO))&&STR((25.CONTO<=#ACONTO))";
|
||
}
|
||
else if(get_int(F_DACONTO) > 0)
|
||
{
|
||
query << "&&(25.CONTO=#DACONTO)";
|
||
}
|
||
else if(get_int(F_ACONTO) > 0)
|
||
{
|
||
query << "&&(25.CONTO=#ACONTO)";
|
||
}
|
||
|
||
/* Sottoconto *************************************************************/
|
||
|
||
if(get_int(F_DASOTTOCONTO) > 0 && get_int(F_ASOTTOCONTO) > 0)
|
||
{
|
||
query << "&&STR((25.SOTTOCONTO>=#DASOTTOCONTO))&&STR((25.SOTTOCONTO<=#ASOTTOCONTO))";
|
||
}
|
||
else if(get_int(F_DASOTTOCONTO) > 0)
|
||
{
|
||
query << "&&(25.SOTTOCONTO=#DASOTTOCONTO)";
|
||
}
|
||
else if(get_int(F_ASOTTOCONTO) > 0)
|
||
{
|
||
query << "&&(25.SOTTOCONTO=#ASOTTOCONTO)";
|
||
}
|
||
}
|
||
|
||
if(get_real(F_DAIMPORTO) > ZERO && get_real(F_AIMPORTO) > ZERO)
|
||
{
|
||
query << "&&STR((23.TOTDOC>=#DATOTDOC))&&STR((23.TOTDOC<=#ATOTDOC))";
|
||
}
|
||
if(get_real(F_DAIMPORTO) > ZERO)
|
||
{
|
||
query << "&&(23.TOTDOC>#DATOTDOC)";
|
||
}
|
||
if(get_real(F_AIMPORTO) > ZERO)
|
||
{
|
||
query << "&&(23.TOTDOC<#ATOTDOC)";
|
||
}
|
||
|
||
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_DAFORNITORE))
|
||
{
|
||
recset.set_var("#DACODCF", get(F_DACODCF));
|
||
}
|
||
if(get_bool(B_AFORNITORE))
|
||
{
|
||
recset.set_var("#ACODCF", get(F_ACODCF));
|
||
}
|
||
|
||
if(nolav)
|
||
{
|
||
|
||
/* Gruppo *************************************************************/
|
||
|
||
if(get_int(F_DAGRUPPO) > 0)
|
||
{
|
||
recset.set_var("#DAGRUPPO", get(F_DAGRUPPO));
|
||
}
|
||
if(get_int(F_AGRUPPO) > 0)
|
||
{
|
||
recset.set_var("#AGRUPPO", get(F_AGRUPPO));
|
||
}
|
||
|
||
/* Conto *************************************************************/
|
||
|
||
if(get_int(F_DACONTO) > 0)
|
||
{
|
||
recset.set_var("#DACONTO", get(F_DACONTO));
|
||
}
|
||
if(get_int(F_ACONTO) > 0)
|
||
{
|
||
recset.set_var("#ACONTO", get(F_ACONTO));
|
||
}
|
||
|
||
/* Sottoconto *************************************************************/
|
||
|
||
if(get_int(F_DASOTTOCONTO) > 0)
|
||
{
|
||
recset.set_var("#DASOTTOCONTO", get(F_DASOTTOCONTO));
|
||
}
|
||
if(get_int(F_ASOTTOCONTO) > 0)
|
||
{
|
||
recset.set_var("#ASOTTOCONTO", get(F_ASOTTOCONTO));
|
||
}
|
||
}
|
||
|
||
if(get_real(F_DAIMPORTO) > ZERO)
|
||
recset.set_var("#DATOTDOC", get_real(F_DAIMPORTO));
|
||
|
||
if(get_real(F_AIMPORTO) > ZERO)
|
||
recset.set_var("#ATOTDOC", get_real(F_AIMPORTO));
|
||
|
||
return recset;
|
||
}
|
||
|
||
TDate TEsportaIva_msk::getDataTest() const
|
||
{
|
||
if(get_date(F_ADATAPAG).ok())
|
||
{
|
||
return get_date(F_ADATAPAG);
|
||
}
|
||
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
|
||
{
|
||
TPartite_array torneo;
|
||
//aggiungo all'array tutte le partite con quel numreg
|
||
torneo.add_numreg(numreg);
|
||
TPartita* partita = torneo.first();
|
||
//se esiste almeno una partita ed <20> chiusa
|
||
if (partita != NULL && partita->chiusa())
|
||
{
|
||
//scorro tutte le partite
|
||
for (int r = partita->last(); r > 0; r = partita->pred(r))
|
||
{
|
||
//instanzio una riga_partite
|
||
const TRiga_partite& row = partita->riga(r);
|
||
const tipo_movimento tipo = row.tipo();
|
||
//controllo il tipo_movimento; se <20> del tipo tm_pagamento o tm_pagamento_insoluto
|
||
//recupero la data del pagamento, e se questa <20> maggiore di quella gi<67> trovata, aggiorno
|
||
//quest'ultima
|
||
if (tipo == tm_pagamento || tipo == tm_pagamento_insoluto)
|
||
{
|
||
const TDate datadoc = row.get_date(PART_DATAPAG);
|
||
if (datadoc > last_data_pag)
|
||
last_data_pag = datadoc;
|
||
}
|
||
}
|
||
return last_data_pag <= data ? true : false;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
void TEsportaIva_msk::fill()
|
||
{
|
||
// Controllo se i campi corretti
|
||
if(!testFields())
|
||
return;
|
||
|
||
// Cambio pagina
|
||
show_page(1);
|
||
|
||
bool with_cms = get_int(F_JOB) == 1;
|
||
// Controllo che data mettere per partita chiusa
|
||
TDate dataTest = getDataTest();
|
||
|
||
TISAM_recordset rmoviva = createRecset();
|
||
|
||
TSheet_field& sheet = sfield(S_RESULT);
|
||
TString_array& strarr = sheet.rows_array();
|
||
|
||
sheet.hide();
|
||
sheet.destroy();
|
||
|
||
TProgress_monitor pi(rmoviva.items(), TR("Creazione sheet..."));
|
||
|
||
bool lav = get_int(F_JOB) == 1;
|
||
bool all = get_bool(B_PRTAPE) && get_bool(B_PRTCHIU);
|
||
for (bool ok = rmoviva.move_first(); ok && !pi.is_cancelled(); ok = rmoviva.move_next())
|
||
{
|
||
if (!pi.add_status())
|
||
break;
|
||
|
||
if(get_bool(B_SOLRITFIS) && rmoviva.get("23.RITFIS").as_real() <= ZERO && !regSpec(rmoviva.get("23.CODCAUS").as_string())) continue;
|
||
|
||
TCursor* i = rmoviva.cursor();
|
||
int k = i->pos();
|
||
|
||
TDate last_data_pag;
|
||
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, dataTest);
|
||
|
||
TDate daDPag = get_date(F_DADATAPAG), aDPag = get_date(F_ADATAPAG);
|
||
if(!aDPag.ok() && daDPag.ok()) // Sistemo le date solo se mi ha messo il filtro complementare
|
||
{
|
||
aDPag = TDate(TODAY);
|
||
}
|
||
if(!daDPag.ok() && aDPag.ok())
|
||
{
|
||
daDPag = TDate(01,01,1990);
|
||
}
|
||
|
||
if(aDPag.ok() && daDPag.ok() && (last_data_pag < daDPag || aDPag < last_data_pag || !last_data_pag.ok())) continue;
|
||
|
||
if (all || (get_bool(B_PRTAPE) && !partita_chiusa) || (get_bool(B_PRTCHIU) && partita_chiusa))
|
||
{
|
||
if (with_cms)
|
||
{
|
||
TAnal_mov movana;
|
||
|
||
movana.read_cgnum(numreg);
|
||
const int rows = movana.rows();
|
||
|
||
if (rows > 0)
|
||
{
|
||
for(int i = 1; i <= rows; i++)
|
||
{
|
||
TToken_string row;
|
||
const TRectype& rmovana = movana.body()[i];
|
||
const TString codcms = rmovana.get("CODCMS");
|
||
if(atoi(codcms) == 37832)
|
||
bool tolla = true;
|
||
|
||
// Controllo gruppo conto e sottoconto se ho l'id lavorazione
|
||
if(lav)
|
||
{
|
||
int gruppo = atoi(rmovana.get("CODCONTO").left(3));
|
||
int conto = atoi(rmovana.get("CODCONTO").mid(3,3));
|
||
int sottoconto = atoi(rmovana.get("CODCONTO").mid(6,6));
|
||
if( (get_int(F_DAGRUPPO) != 0 && get_int(F_DAGRUPPO) > gruppo) ||
|
||
(get_int(F_AGRUPPO) != 0 && get_int(F_AGRUPPO) < gruppo) ||
|
||
(get_int(F_DACONTO) != 0 && get_int(F_DACONTO) > conto) ||
|
||
(get_int(F_ACONTO) != 0 && get_int(F_ACONTO) < conto) ||
|
||
(get_int(F_DASOTTOCONTO) != 0 && get_int(F_DASOTTOCONTO) > sottoconto) ||
|
||
(get_int(F_ASOTTOCONTO) != 0 && get_int(F_ASOTTOCONTO) < sottoconto))
|
||
continue;
|
||
}
|
||
|
||
row.add(rmoviva.get("23.DATAREG").as_string(), 0);
|
||
row.add(codcms);
|
||
row.add(rmoviva.get("23.CODCF").as_string());
|
||
row.add(rmoviva.get("20.RAGSOC").as_string());
|
||
char sez = rmovana.get_char("SEZIONE");
|
||
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.TOTDOC").as_real());
|
||
row.add(rmoviva.get("23.DATADOC").as_string());
|
||
row.add(rmoviva.get("23.NUMDOC").as_string());
|
||
row.add(last_data_pag);
|
||
row.add(rmovana.get("CODCONTO").left(3));
|
||
row.add(rmovana.get("CODCONTO").mid(3,3));
|
||
row.add(rmovana.get("CODCONTO").mid(6,6));
|
||
strarr.add(row);
|
||
}
|
||
while (rmoviva.move_next())
|
||
{
|
||
const long wnumreg = rmoviva.get(RMI_NUMREG).as_int();
|
||
if (wnumreg != numreg)
|
||
{
|
||
rmoviva.move_prev();
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
const TString & codcms = rmoviva.get("CODCMS").as_string();
|
||
|
||
// Con quelli che non hanno delle righe effettuo il filtro con g/c/s della contabilit<69>,
|
||
// controllo lo stesso lav perch<63> indica se devo farlo o meno
|
||
if(lav)
|
||
{
|
||
int gruppo = rmoviva.get("25.GRUPPO").as_int();
|
||
int conto = rmoviva.get("25.CONTO").as_int();
|
||
int sottoconto = rmoviva.get("25.SOTTOCONTO").as_int();
|
||
if( (get_int(F_DAGRUPPO) != 0 && get_int(F_DAGRUPPO) > gruppo) ||
|
||
(get_int(F_AGRUPPO) != 0 && get_int(F_AGRUPPO) < gruppo) ||
|
||
(get_int(F_DACONTO) != 0 && get_int(F_DACONTO) > conto) ||
|
||
(get_int(F_ACONTO) != 0 && get_int(F_ACONTO) < conto) ||
|
||
(get_int(F_DASOTTOCONTO) != 0 && get_int(F_DASOTTOCONTO) > sottoconto) ||
|
||
(get_int(F_ASOTTOCONTO) != 0 && get_int(F_ASOTTOCONTO) < sottoconto))
|
||
continue;
|
||
}
|
||
|
||
if (codcms.full())
|
||
{
|
||
TToken_string row;
|
||
row.add(rmoviva.get("23.DATAREG").as_string(), 0);
|
||
row.add(codcms);
|
||
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("23.RITFIS").as_real());
|
||
row.add(rmoviva.get("23.TOTDOC").as_real());
|
||
row.add(rmoviva.get("23.DATADOC").as_string());
|
||
row.add(rmoviva.get("23.NUMDOC").as_string());
|
||
row.add(last_data_pag);
|
||
row.add(rmoviva.get("25.GRUPPO").as_string());
|
||
row.add(rmoviva.get("25.CONTO").as_string());
|
||
row.add(rmoviva.get("25.SOTTOCONTO").as_string());
|
||
strarr.add(row);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
if (rmoviva.get("CODCMS").as_string().blank())
|
||
{
|
||
TToken_string row;
|
||
row.add(rmoviva.get("23.DATAREG").as_string(), 0);
|
||
row.add("");
|
||
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("23.RITFIS").as_real());
|
||
row.add(rmoviva.get("23.TOTDOC").as_real());
|
||
row.add(rmoviva.get("23.DATADOC").as_string());
|
||
row.add(rmoviva.get("23.NUMDOC").as_string());
|
||
row.add(last_data_pag);
|
||
row.add(rmoviva.get("25.GRUPPO").as_string());
|
||
row.add(rmoviva.get("25.CONTO").as_string());
|
||
row.add(rmoviva.get("25.SOTTOCONTO").as_string());
|
||
strarr.add(row);
|
||
}
|
||
}
|
||
}
|
||
sheet.force_update();
|
||
sheet.show();
|
||
}
|
||
|
||
//metodo costruttore
|
||
TEsportaIva_msk::TEsportaIva_msk() : TAutomask("ps0713800a"){}
|
||
|
||
///////////////////////////////////
|
||
//// TEsportaIva_REC ////
|
||
///////////////////////////////////
|
||
|
||
//Classe TEsportaIva_rec (righe movimenti iva)
|
||
class TEsportaIva_rec : public TCSV_recordset
|
||
{
|
||
public:
|
||
TEsportaIva_rec();
|
||
};
|
||
|
||
//metodo costruttore
|
||
TEsportaIva_rec::TEsportaIva_rec()
|
||
: TCSV_recordset("CSV(\"\t\")")
|
||
{
|
||
}
|
||
|
||
///////////////////////////////////
|
||
//// TEsportaIva_APP ////
|
||
///////////////////////////////////
|
||
|
||
//Classe TEsportaIva_app
|
||
class TEsportaIva_app : public TSkeleton_application
|
||
{
|
||
friend class TEsportaIva_msk;
|
||
protected:
|
||
virtual bool check_autorization() const {return false;}
|
||
virtual const char * extra_modules() const {return "cg";}
|
||
virtual void main_loop();
|
||
|
||
bool test_partita(const long numreg, TDate& last_data_pag, const TDate& data) const;
|
||
|
||
public:
|
||
void esporta_righe_iva(const TEsportaIva_msk& msk) const;
|
||
void set_inviva(TISAM_recordset& rmoviva, const TDate& data) const;
|
||
};
|
||
|
||
//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_app::test_partita(const long numreg, TDate& last_data_pag, const TDate& data) const
|
||
{
|
||
TPartite_array torneo;
|
||
//aggiungo all'array tutte le partite con quel numreg
|
||
torneo.add_numreg(numreg);
|
||
TPartita* partita = torneo.first();
|
||
//se esiste almeno una partita ed <20> chiusa
|
||
if (partita != NULL && partita->chiusa())
|
||
{
|
||
//scorro tutte le partite
|
||
for (int r = partita->last(); r > 0; r = partita->pred(r))
|
||
{
|
||
//instanzio una riga_partite
|
||
const TRiga_partite& row = partita->riga(r);
|
||
const tipo_movimento tipo = row.tipo();
|
||
//controllo il tipo_movimento; se <20> del tipo tm_pagamento o tm_pagamento_insoluto
|
||
//recupero la data del pagamento, e se questa <20> maggiore di quella gi<67> trovata, aggiorno
|
||
//quest'ultima
|
||
if (tipo == tm_pagamento || tipo == tm_pagamento_insoluto)
|
||
{
|
||
const TDate datadoc = row.get_date(PART_DATAPAG);
|
||
if (datadoc > last_data_pag)
|
||
last_data_pag = datadoc;
|
||
}
|
||
}
|
||
return last_data_pag <= data ? true : false;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
//ESPORTA_RIGHE_IVA: metodo che prepara il csv-recordset per essere esportato
|
||
void TEsportaIva_app::esporta_righe_iva(const TEsportaIva_msk& m) const
|
||
{
|
||
// Controllo se i campi corretti
|
||
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) << "<EFBFBD> gi<67> esistente.\n"
|
||
<< "Se si procede sara' azzerato il file esistente!\nContinuare?";
|
||
if (!yesno_box(str))
|
||
return;
|
||
}
|
||
|
||
bool with_cms = m.get_int(F_JOB) == 1;
|
||
// Controllo che data mettere per partita chiusa
|
||
TDate dataTest = m.getDataTest();
|
||
TISAM_recordset rmoviva = m.createRecset();
|
||
|
||
//instanzio il csv recordset
|
||
TEsportaIva_rec csv;
|
||
bool lav = m.get_int(F_JOB) == 1;
|
||
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(m.get_bool(B_SOLRITFIS) && rmoviva.get("23.RITFIS").as_real() <= ZERO && !regSpec(rmoviva.get("23.CODCAUS").as_string())) continue;
|
||
|
||
TDate last_data_pag;
|
||
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, dataTest);
|
||
|
||
TDate daDPag = m.get_date(F_DADATAPAG), aDPag = m.get_date(F_ADATAPAG);
|
||
if(!aDPag.ok() && daDPag.ok()) // Sistemo le date solo se mi ha messo il filtro complementare
|
||
{
|
||
aDPag = TDate(TODAY);
|
||
}
|
||
if(!daDPag.ok() && aDPag.ok())
|
||
{
|
||
daDPag = TDate(01,01,1990);
|
||
}
|
||
|
||
if(aDPag.ok() && daDPag.ok() && (last_data_pag < daDPag || aDPag < last_data_pag || !last_data_pag.ok())) continue;
|
||
|
||
if (all || (m.get_bool(B_PRTAPE) && !partita_chiusa) || (m.get_bool(B_PRTCHIU) && partita_chiusa))
|
||
{
|
||
if (with_cms)
|
||
{
|
||
TAnal_mov movana;
|
||
|
||
movana.read_cgnum(numreg);
|
||
const int rows = movana.rows();
|
||
|
||
if (rows > 0)
|
||
{
|
||
for(int i = 1; i <= rows; i++)
|
||
{
|
||
csv.new_rec("");
|
||
const TRectype& rmovana = movana.body()[i];
|
||
const TString80 codcms = rmovana.get("CODCMS");
|
||
|
||
// Controllo gruppo conto e sottoconto se ho l'id lavorazione
|
||
if(lav)
|
||
{
|
||
int gruppo = atoi(rmovana.get("CODCONTO").left(3));
|
||
int conto = atoi(rmovana.get("CODCONTO").mid(3,3));
|
||
int sottoconto = atoi(rmovana.get("CODCONTO").mid(6,6));
|
||
if( (m.get_int(F_DAGRUPPO) != 0 && m.get_int(F_DAGRUPPO) > gruppo) ||
|
||
(m.get_int(F_AGRUPPO) != 0 && m.get_int(F_AGRUPPO) < gruppo) ||
|
||
(m.get_int(F_DACONTO) != 0 && m.get_int(F_DACONTO) > conto) ||
|
||
(m.get_int(F_ACONTO) != 0 && m.get_int(F_ACONTO) < conto) ||
|
||
(m.get_int(F_DASOTTOCONTO) != 0 && m.get_int(F_DASOTTOCONTO) > sottoconto) ||
|
||
(m.get_int(F_ASOTTOCONTO) != 0 && m.get_int(F_ASOTTOCONTO) < sottoconto))
|
||
continue;
|
||
}
|
||
|
||
csv.set(0, rmoviva.get("23.DATAREG").as_string());
|
||
csv.set(1, codcms);
|
||
csv.set(2, rmoviva.get("23.CODCF"));
|
||
csv.set(3, rmoviva.get("20.RAGSOC"));
|
||
char sez = rmovana.get_char("SEZIONE");
|
||
TImporto importo(sez, rmovana.get_real("IMPORTO"));
|
||
importo.normalize('D');
|
||
csv.set(4, importo.valore());
|
||
|
||
csv.set(5, rmoviva.get("23.RITFIS").as_real());
|
||
csv.set(6, rmoviva.get("23.TOTDOC").as_real());
|
||
csv.set(7, rmoviva.get("23.DATADOC"));
|
||
csv.set(8, rmoviva.get("23.NUMDOC"));
|
||
csv.set(9, last_data_pag);
|
||
csv.set(10, rmovana.get("CODCONTO").left(3));
|
||
csv.set(11, rmovana.get("CODCONTO").mid(3,3));
|
||
csv.set(12, rmovana.get("CODCONTO").mid(6,6));
|
||
}
|
||
while (rmoviva.move_next())
|
||
{
|
||
const long wnumreg = rmoviva.get(RMI_NUMREG).as_int();
|
||
if (wnumreg != numreg)
|
||
{
|
||
rmoviva.move_prev();
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
const TString & codcms = rmoviva.get("CODCMS").as_string();
|
||
|
||
// Con quelli che non hanno delle righe effettuo il filtro con g/c/s della contabilit<69>,
|
||
// controllo lo stesso lav perch<63> indica se devo farlo o meno
|
||
if(lav)
|
||
{
|
||
int gruppo = rmoviva.get("25.GRUPPO").as_int();
|
||
int conto = rmoviva.get("25.CONTO").as_int();
|
||
int sottoconto = rmoviva.get("25.SOTTOCONTO").as_int();
|
||
if( (m.get_int(F_DAGRUPPO) != 0 && m.get_int(F_DAGRUPPO) > gruppo) ||
|
||
(m.get_int(F_AGRUPPO) != 0 && m.get_int(F_AGRUPPO) < gruppo) ||
|
||
(m.get_int(F_DACONTO) != 0 && m.get_int(F_DACONTO) > conto) ||
|
||
(m.get_int(F_ACONTO) != 0 && m.get_int(F_ACONTO) < conto) ||
|
||
(m.get_int(F_DASOTTOCONTO) != 0 && m.get_int(F_DASOTTOCONTO) > sottoconto) ||
|
||
(m.get_int(F_ASOTTOCONTO) != 0 && m.get_int(F_ASOTTOCONTO) < sottoconto))
|
||
continue;
|
||
}
|
||
|
||
if (codcms.full())
|
||
{
|
||
csv.new_rec("");
|
||
csv.set(0, rmoviva.get("23.DATAREG").as_string());
|
||
csv.set(1, codcms);
|
||
csv.set(2, rmoviva.get("23.CODCF"));
|
||
csv.set(3, rmoviva.get("20.RAGSOC"));
|
||
csv.set(4, rmoviva.get(RMI_IMPONIBILE).as_real());
|
||
csv.set(5, rmoviva.get("23.RITFIS").as_real());
|
||
csv.set(6, rmoviva.get("23.TOTDOC").as_real());
|
||
csv.set(7, rmoviva.get("23.DATADOC"));
|
||
csv.set(8, rmoviva.get("23.NUMDOC"));
|
||
csv.set(9, last_data_pag);
|
||
csv.set(10, rmoviva.get("25.GRUPPO"));
|
||
csv.set(11, rmoviva.get("25.CONTO"));
|
||
csv.set(12, rmoviva.get("25.SOTTOCONTO"));
|
||
}
|
||
}
|
||
}
|
||
else
|
||
if (rmoviva.get("CODCMS").as_string().blank())
|
||
{
|
||
csv.new_rec("");
|
||
csv.set(0, rmoviva.get("23.DATAREG").as_string());
|
||
csv.set(1, "");
|
||
csv.set(2, rmoviva.get("23.CODCF"));
|
||
csv.set(3, rmoviva.get("20.RAGSOC"));
|
||
csv.set(4, rmoviva.get(RMI_IMPONIBILE).as_real());
|
||
csv.set(5, rmoviva.get("23.RITFIS").as_real());
|
||
csv.set(6, rmoviva.get("23.TOTDOC").as_real());
|
||
csv.set(7, rmoviva.get("23.DATADOC"));
|
||
csv.set(8, rmoviva.get("23.NUMDOC"));
|
||
csv.set(9, last_data_pag);
|
||
csv.set(10, rmoviva.get("25.GRUPPO"));
|
||
csv.set(11, rmoviva.get("25.CONTO"));
|
||
csv.set(12, rmoviva.get("25.SOTTOCONTO"));
|
||
}
|
||
}
|
||
}
|
||
csv.save_as(path, fmt_text);
|
||
|
||
#ifdef DBG
|
||
xvt_sys_goto_url(path, "open");
|
||
#endif
|
||
|
||
TString msg;
|
||
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, 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", "Path", m.get(F_PATH));
|
||
}
|
||
|
||
//SET_INVIA: metodo che mette il flag di "INVIVA" alla testata movimento
|
||
void TEsportaIva_app::set_inviva(TISAM_recordset& rmoviva, const TDate& data) const
|
||
{
|
||
return; //Test
|
||
long last_numreg = 0L;
|
||
|
||
TProgind pi(rmoviva.items(), TR("Impostazione flag Inviata parte IVA..."), true, true);
|
||
TLocalisamfile mov(LF_MOV);
|
||
|
||
//scorro il recordset che contiene le righe IVA joinate con i movimenti
|
||
for (bool ok = rmoviva.move_first(); ok; ok = rmoviva.move_next())
|
||
{
|
||
if (!pi.addstatus(1))
|
||
break;
|
||
|
||
const long curr_numreg = rmoviva.get(RMI_NUMREG).as_int();
|
||
//ad ogni cambio di numreg
|
||
if (curr_numreg != last_numreg)
|
||
{
|
||
TDate last_data_pag;
|
||
bool partita_chiusa = test_partita(curr_numreg, last_data_pag, data);
|
||
//controllo che la partita sia chiusa
|
||
if (partita_chiusa)
|
||
{
|
||
//leggo dal file LF_MOV quello che ha il numero di registrazione selezionato
|
||
mov.put(MOV_NUMREG, curr_numreg);
|
||
int err = mov.read();
|
||
|
||
//se riesco a leggerlo setto il flag di invio e aggiorno il movimento
|
||
if (err == NOERR)
|
||
{
|
||
mov.put(MOV_INVIVA, 'X');
|
||
err = mov.rewrite();
|
||
}
|
||
|
||
//se non sono riuscito ne' a leggerlo ne' a scriverlo, lo segnalo
|
||
if (err != NOERR)
|
||
{
|
||
TString str;
|
||
str << TR("Impossibile aggiornare il movimento ") << curr_numreg;
|
||
error_box(str);
|
||
break;
|
||
}
|
||
}
|
||
last_numreg = curr_numreg;
|
||
}
|
||
}
|
||
}
|
||
|
||
void TEsportaIva_app::main_loop()
|
||
{
|
||
TEsportaIva_msk m;
|
||
while (m.run() == K_ENTER)
|
||
esporta_righe_iva(m);
|
||
}
|
||
|
||
int ps0713800(int argc, char* argv[])
|
||
{
|
||
TEsportaIva_app app;
|
||
app.run(argc, argv, TR("Trasferimento dati IVA"));
|
||
return 0;
|
||
}
|