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