186 lines
4.4 KiB
C++
186 lines
4.4 KiB
C++
|
#include <applicat.h>
|
||
|
#include <automask.h>
|
||
|
#include <dongle.h>
|
||
|
#include <lffiles.h>
|
||
|
#include <progind.h>
|
||
|
#include <recset.h>
|
||
|
#include <relation.h>
|
||
|
|
||
|
#include "ve4.h"
|
||
|
#include "ve4200a.h"
|
||
|
|
||
|
#include "condv.h"
|
||
|
#include "rcondv.h"
|
||
|
#include "doc.h"
|
||
|
#include "rdoc.h"
|
||
|
|
||
|
#include "../mg/anamag.h"
|
||
|
|
||
|
class TAggiornaIVA_msk : public TAutomask
|
||
|
{
|
||
|
private:
|
||
|
bool anteprima(TISAM_recordset& recset) const;
|
||
|
bool aggiorna(TISAM_recordset& recset) const;
|
||
|
|
||
|
protected:
|
||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
|
||
|
public:
|
||
|
bool elabora(int logicnum) const;
|
||
|
TAggiornaIVA_msk() : TAutomask("ve4200a") {}
|
||
|
};
|
||
|
|
||
|
bool TAggiornaIVA_msk::anteprima(TISAM_recordset& recset) const
|
||
|
{
|
||
|
const TRecnotype tot = recset.items();
|
||
|
if (tot == 0)
|
||
|
return warning_box(TR("Non ci sono record da elaborare"));
|
||
|
|
||
|
TCursor* cur = recset.cursor();
|
||
|
TLocalisamfile& arc = cur->file();
|
||
|
|
||
|
const char *fields = RDOC_CODIVA;
|
||
|
const char* head = "IVA@4";
|
||
|
switch(arc.num())
|
||
|
{
|
||
|
case LF_RIGHEDOC:
|
||
|
fields = RDOC_ANNO"|"RDOC_CODNUM"|"RDOC_NDOC"|33->"DOC_DATADOC"|33->"DOC_STATO"|"RDOC_CODART"|"RDOC_CODIVA;
|
||
|
head = "Anno|Num.|Doc.@7|Data@10|Stato|Articolo@20|IVA@4";
|
||
|
break;
|
||
|
case LF_ANAMAG:
|
||
|
fields = ANAMAG_CODART"|"ANAMAG_DESCR"|"ANAMAG_CODIVA;
|
||
|
head = "Articolo@20|Descrizione@50|IVA@4";
|
||
|
break;
|
||
|
case LF_RCONDV:
|
||
|
fields = RCONDV_TIPO"|"RCONDV_CODCF"|"RCONDV_COD"|52->"CONDV_VALFIN"|"RCONDV_CODRIGA"|"RCONDV_CODIVA;
|
||
|
head = "Tipo|Cliente|Cod.|Data Fine@10|Articolo@20|IVA@4";
|
||
|
break;
|
||
|
default: break;
|
||
|
}
|
||
|
|
||
|
TCursor_sheet sheet(cur, fields, arc.description(), head, 0, 1);
|
||
|
return sheet.run() == K_ENTER;
|
||
|
}
|
||
|
|
||
|
bool TAggiornaIVA_msk::aggiorna(TISAM_recordset& recset) const
|
||
|
{
|
||
|
const TRecnotype tot = recset.items();
|
||
|
|
||
|
if (tot == 0 || !yesno_box(FR("Si conferma l'aggiornamento di %ld record?"), tot))
|
||
|
return false;
|
||
|
|
||
|
TLocalisamfile& arc = recset.cursor()->file();
|
||
|
TRectype& rec = arc.curr();
|
||
|
const TString& newiva = get(F_NEWCODIVA);
|
||
|
|
||
|
TProgind pi(tot, TR("Aggiornamento codice IVA"));
|
||
|
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||
|
{
|
||
|
if (!pi.addstatus(1))
|
||
|
return false;
|
||
|
rec.put("CODIVA", newiva);
|
||
|
if (arc.rewrite() != NOERR)
|
||
|
return cantwrite_box(arc.name());
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
bool TAggiornaIVA_msk::elabora(int logicnum) const
|
||
|
{
|
||
|
const TString& oldiva = get(F_OLDCODIVA);
|
||
|
const TDate dal = get(F_DAL);
|
||
|
const TDate al(31,12,dal.year());
|
||
|
const TString& codnum = get(F_CODNUM);
|
||
|
const TString& stato = get(F_STATO);
|
||
|
|
||
|
TString query;
|
||
|
query << "USE " << logicnum << " SELECT (CODIVA==\"" << oldiva << "\")";
|
||
|
switch (logicnum)
|
||
|
{
|
||
|
case LF_RIGHEDOC:
|
||
|
{
|
||
|
query << "&&(BETWEEN(33->DATADOC," << dal.date2ansi() << "," << al.date2ansi() << "))"
|
||
|
<< "&&(33->STATO==\"" << stato << "\")";
|
||
|
query << "\nJOIN DOC INTO PROVV=PROVV ANNO=ANNO CODNUM==CODNUM NDOC==NDOC";
|
||
|
TString range;
|
||
|
range << "PROVV=D ANNO=" << dal.year() << " CODNUM=" << codnum;
|
||
|
query << "\nFROM " << range << "\nTO " << range;
|
||
|
}
|
||
|
break;
|
||
|
case LF_RCONDV:
|
||
|
{
|
||
|
query << "&&(STR((ANSI(52->VALFIN)==0)||(ANSI(52->VALFIN)>=" << dal.date2ansi() <<")))";
|
||
|
query << "\nJOIN CONDV INTO TIPO=TIPO CATVEN==CATVEN TIPOCF=TIPOCF CODCF==CODCF COD==COD";
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
TISAM_recordset recset(query);
|
||
|
|
||
|
if (!anteprima(recset))
|
||
|
return false;
|
||
|
|
||
|
return aggiorna(recset);
|
||
|
}
|
||
|
|
||
|
bool TAggiornaIVA_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
class TAggiornaIVA_app : public TSkeleton_application
|
||
|
{
|
||
|
protected:
|
||
|
virtual bool create();
|
||
|
virtual void main_loop();
|
||
|
};
|
||
|
|
||
|
bool TAggiornaIVA_app::create()
|
||
|
{
|
||
|
Tdninst dninst;
|
||
|
bool good = dninst.find_serno();
|
||
|
if (good)
|
||
|
{
|
||
|
TString msg;
|
||
|
good = dninst.test_cmdline("MustCall", false, msg) == 0;
|
||
|
}
|
||
|
if (!good)
|
||
|
return error_box(FR("Chiave %d non abilitata all'utilizzo di questa procedura"), dongle().number());
|
||
|
return TSkeleton_application::create();
|
||
|
}
|
||
|
|
||
|
|
||
|
void TAggiornaIVA_app::main_loop()
|
||
|
{
|
||
|
TAggiornaIVA_msk m;
|
||
|
while (m.run() == K_ENTER)
|
||
|
{
|
||
|
const int file = m.get_int(F_FILE);
|
||
|
switch (file)
|
||
|
{
|
||
|
case LF_DOC:
|
||
|
case LF_RIGHEDOC:
|
||
|
m.elabora(LF_RIGHEDOC);
|
||
|
break;
|
||
|
case LF_ANAMAG:
|
||
|
m.elabora(LF_ANAMAG);
|
||
|
break;
|
||
|
case LF_CONDV:
|
||
|
case LF_RCONDV:
|
||
|
m.elabora(LF_RCONDV);
|
||
|
break;
|
||
|
default: break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int ve4200(int argc, char* argv[])
|
||
|
{
|
||
|
TAggiornaIVA_app r;
|
||
|
r.run(argc, argv, TR("Aggiornamento codici IVA"));
|
||
|
return 0;
|
||
|
}
|