#include #include #include #include #include #include #include "effetti.h" #include "cession.h" #include "ef0.h" #include "ef0100.h" #include "ef0101.h" class Variazione_Effetti: public TRelation_application { TMask* _msk; TEffObb *_rel; virtual const char* get_next_key(); TSheet_field& obb_sheet() const; void obb_pack(); void common_f(const TMask& m); virtual int read(TMask& m); virtual int rewrite(const TMask& m); virtual int write(const TMask& m); bool user_create(); bool user_destroy(); virtual TMask* get_mask(int mode) {return _msk;} virtual bool changing_mask(int mode) {return FALSE;} public: static bool codcf_handler(TMask_field& f, KEY k); static bool effcomp_handler(TMask_field& f, KEY k); virtual TRelation* get_relation() const {return _rel;} Variazione_Effetti() {} }; const char* Variazione_Effetti::get_next_key() { TLocalisamfile& effetti=_rel->lfile(); long nprogtr=1L; if (!effetti.empty()) { effetti.zero(); effetti.setkey(1); effetti.last(); if (effetti.good()) nprogtr+=effetti.get_long(EFF_NPROGTR); } return format("%d|%ld",F_NPROGTR,nprogtr); } TSheet_field& Variazione_Effetti::obb_sheet() const { TSheet_field& o_sheet=(TSheet_field&) _msk->field(F_SHEET_EFF); return o_sheet; } void Variazione_Effetti::obb_pack() { TArray& rows=obb_sheet().rows_array(); int nr=rows.items(); for (int i=0;ilfile().zero(); m.autosave(*_rel); // LF_CESS SAVER! _rel->destroy_rows(); obb_pack(); TArray& rows=obb_sheet().rows_array(); for (int i=0; iobbligato(i); row.restart(); rec.zero(); rec.put(CES_NPROGTR,nprogtr); rec.put(CES_NRIGA,i+1); rec.put(CES_RAGSOC,row.get()); rec.put(CES_LOCALITA,row.get()); rec.put(CES_STATO,row.get_int()); rec.put(CES_COM,row.get()); } } int Variazione_Effetti::read(TMask& m) { m.autoload(*_rel); // LF_CESS loader! TToken_string riga(80); obb_sheet().reset(); for (int i=0; i<_rel->obbligati_items();i++) { TRectype& rec=_rel->obbligato(i); riga.cut(0); riga.add(rec.get(CES_RAGSOC)); riga.add(rec.get(CES_LOCALITA)); riga.add(rec.get(CES_STATO)); riga.add(rec.get(CES_COM)); obb_sheet().row(i)=riga; } return _rel->status(); } int Variazione_Effetti::rewrite(const TMask& m) { common_f(m); return _rel->rewrite(TRUE); } int Variazione_Effetti::write(const TMask& m) { common_f(m); return _rel->write(TRUE); } bool Variazione_Effetti::user_create() { _msk = new TMask("ef0100a") ; _rel = new TEffObb; _msk->set_handler(F_CODCF,codcf_handler); _msk->set_handler(F_EFFCOMP,effcomp_handler); return TRUE; } bool Variazione_Effetti::user_destroy() { delete _msk; delete _rel; return TRUE; } bool Variazione_Effetti::codcf_handler(TMask_field& f, KEY k) { long codcf = atol(f.get()), n = 0; TString ragsoc(50); TToken_string line; TLocalisamfile clifo(LF_CLIFO); TArray_sheet cli(-1,-1,59,20,"Clienti","Codice|Ragione sociale@50|Sospeso|Codice fiscale@18"); switch (k) { case K_TAB: if (f.focusdirty()) // When changing focus put customer's name { clifo.zero(); clifo.setkey(1); clifo.put(CLI_TIPOCF,"C"); clifo.put(CLI_CODCF,codcf); clifo.read(); if (clifo.good()) { ragsoc=clifo.get(CLI_RAGSOC); f.mask().set(F_CFRAGSOC,(const char*)ragsoc); } else return FALSE; } break; case K_F8: // If F8 was pressed perform customer's search clifo.setkey(1); clifo.first(); while (clifo.good() && clifo.get(CLI_TIPOCF)=="C") { line.cut(0); if (codcf == clifo.get_long(CLI_CODCF)) n=cli.items(); line.add(clifo.get(CLI_CODCF)); line.add(clifo.get(CLI_RAGSOC)); line.add(clifo.get(CLI_SOSPESO)); line.add(clifo.get(CLI_COFI)); cli.add(line); clifo.next(); } cli.select(n); if (cli.run()==K_ENTER) { line=cli.row(-1); f.set(line.get(0)); f.mask().set(F_CFRAGSOC,line.get(1)); } break; default: break; } return TRUE; } bool Variazione_Effetti::effcomp_handler(TMask_field& f, KEY k) { if (!f.mask().get(F_NRATA).empty()) f.set("X"); return TRUE; } int ef0100(int argc, char* argv[]) { Variazione_Effetti a ; a.run(argc, argv, "Gestione effetti"); return 0; }