campo-sirio/ve/ve4200.cpp

186 lines
4.4 KiB
C++
Raw Normal View History

#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;
}