#include #include #include #include #include "pg0002100a.h" #include #include #include "../cg/cglib01.h" #include "../ve/velib.h" #include "../ve/velib04.h" // TAutomask class TAggiorna_mask : public TAutomask { void serialize(bool bSave); protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TAggiorna_mask() : TAutomask("pg0002100a") {} virtual ~TAggiorna_mask() {} }; bool TAggiorna_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_RICARICO : if (e == fe_modify) { TMask & m = o.mask(); TArticolo & art = cached_article(m.get(F_CODART)); TCodiceIVA c(art.get(ANAMAG_CODIVA)); real costo(m.get(F_COSTO)); const real perc = cache().get("CVE", m.get(F_RICARICO), "R2"); real prezzo = costo * ( UNO + (perc / CENTO)); prezzo = c.lordo(prezzo, 20); prezzo.round(0); m.set(F_PREZZOL, prezzo, 0x3); } break; case F_PREZZO : if (e == fe_modify) { TMask & m = o.mask(); TArticolo & art = cached_article(m.get(F_CODART)); real prezzo(o.get()); TCodiceIVA c(art.get(ANAMAG_CODIVA)); prezzo = c.lordo(prezzo, 20); prezzo.round(TCurrency::get_firm_dec(true)); m.set(F_PREZZOL, prezzo); } break; case F_PREZZOL : if (e == fe_modify) { TMask & m = o.mask(); TArticolo & art = cached_article(m.get(F_CODART)); real prezzo(o.get()); TCodiceIVA c(art.get(ANAMAG_CODIVA)); c.scorpora(prezzo, 20); prezzo.round(TCurrency::get_firm_dec(true)); m.set(F_PREZZO, prezzo); } break; default : break; } return true; } class TAggiorna_prezzi : public TSkeleton_application { TDocumento * _doc; private: protected: virtual const char * extra_modules() const { return "ba"; } virtual void main_loop(); public: const TDocumento & doc() { return *_doc; } void aggiorna(TMask & m); bool set_params(TMask & m); }; // restituisce un riferimento all' applicazione inline TAggiorna_prezzi & app() { return (TAggiorna_prezzi &) main_app();} void TAggiorna_prezzi::aggiorna(TMask & m) { TSheet_field & sh = m.sfield(F_SHEET); const int nrows = doc().physical_rows(); for (int i = 1; i <= nrows; i++) { const TRiga_documento & rdoc = doc()[i]; const TString & codart = rdoc.get(RDOC_CODARTMAG); if (codart.full()) { TToken_string & row = sh.row(-1); row.add(codart, sh.cid2index(F_CODART)); row.add(rdoc.get(RDOC_UMQTA), sh.cid2index(F_UM)); const real costo = rdoc.get_real(RDOC_PREZZO); row.add(costo.string(), sh.cid2index(F_COSTO)); TArticolo & art = cached_article(codart); const TString4 ric = doc().clifor().vendite().get(CFV_CATVEN); row.add(ric, sh.cid2index(F_RICARICO)); const real perc = cache().get("CVE", ric, "R2"); real prezzo = costo * ( UNO + (perc / CENTO)); TCodiceIVA c(art.get(ANAMAG_CODIVA)); prezzo = c.lordo(prezzo, 20); prezzo.round(0); row.add(prezzo.string(), sh.cid2index(F_PREZZOL)); c.scorpora(prezzo, 20); prezzo.round(TCurrency::get_firm_dec(true)); row.add(prezzo.string(), sh.cid2index(F_PREZZO)); row.add(art.get(ANAMAG_DESCR), sh.cid2index(F_DESART)); } } if (m.run() == K_ENTER) { const int shrows = sh.items(); TLocalisamfile f(LF_UMART); for (int i = 0; i < shrows; i++) { TToken_string & row = sh.row(i); TArticolo & art = cached_article(row.get(sh.cid2index(F_CODART))); real prezzo(row.get(sh.cid2index(F_PREZZO))); art.convert_to_um(prezzo, EMPTY_STRING, row.get(sh.cid2index(F_UM))); prezzo.round(TCurrency::get_firm_dec(true)); art.set_prezzo_vendita(prezzo); art.um().row(1).rewrite(f); } TDocumento & d = (TDocumento &)doc(); TElaborazione_esterna e(d.tipo().elaborazione()); d.stato(e.stato_finale_doc_iniziale()[0]); d.rewrite(); const TFixed_string arg = argv(2); TConfig c(arg.mid(2), "Transaction"); c.set("Result", "OUDOC"); } } bool TAggiorna_prezzi::set_params(TMask & m) { const TFixed_string arg = argv(2); if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I')) return false; TString ini_name = arg.mid(2); //controlla che il file su cui deve scrivere ci sia; se non c'é dá una segnalazione di errore if (!fexist(ini_name)) return false; TString4 para; para.format("%d", LF_DOC); TConfig ini(ini_name, para); const char provv = ini.get(DOC_PROVV)[0]; const int anno = ini.get_int(DOC_ANNO); const TString4 codnum = ini.get(DOC_CODNUM); const long ndoc = ini.get_long(DOC_NDOC); _doc = new TDocumento(provv, anno, codnum,ndoc); m.set(F_PROVV, provv); m.set(F_ANNO, anno); m.set(F_CODNUM, codnum, 0x3); m.set(F_NDOC, ndoc, 0x3); return _doc != NULL && _doc->physical_rows() > 0; } void TAggiorna_prezzi::main_loop() //definizione della member function main_loop, della classe TAggiorna_prezzi { open_files(LF_DOC, LF_RIGHEDOC, LF_UMART, 0); if (argc() > 2) { TAggiorna_mask m; if (set_params(m)) aggiorna(m); } } ////// Esecuzione del programma /////////// int pg0002100(int argc, char* argv[]) { TAggiorna_prezzi app; app.run(argc,argv,"Generazione etichette"); return 0; }