#include "db0.h" #include #include #include #include "dblib.h" #include "dbtblav.h" class TLavorazione_tab : public TLavorazione { public: void put_sheet(TSheet_field & s); void fill_sheet(TSheet_field & s); TLavorazione_tab (const TRectype r) : TLavorazione(r) {} TLavorazione_tab (const char* cod = "") : TLavorazione(cod) {} virtual ~TLavorazione_tab (){} }; void TLavorazione_tab::fill_sheet(TSheet_field & sheet) { sheet.destroy(); int righe = 0; const int maxlinee = linee(); for (int j = 0; j < maxlinee ; j++) { TToken_string& row = sheet.row(righe); row=cod_linea(j); if (!row.blank()) { row.add(raw_numpers_linea(j), F_LNUMPERS-101); row.add(raw_produttiv_linea(j).string(), F_LPRODUTTIV-101); sheet.check_row(righe); righe++; } } } void TLavorazione_tab::put_sheet(TSheet_field& sheet) { int righe = sheet.items(); bool ok=TRUE; int l=0; reset_linee(); for (int i = 0; i < righe ; i++) { TToken_string & row=sheet.row(i); TString16 linea =row.get(F_CODLIN-101); if (!linea.blank()) { ok=FALSE; // aggiunge il codice linea linea.trim(); if (set_cod_linea(l,linea)) { // aggiunge il numero persone linea=row.get(F_LNUMPERS-101); linea.rtrim(); if (set_numpers_linea(l,atoi(linea))) { // aggiunge il fattore di produttivitą linea=row.get(F_LPRODUTTIV-101); linea.cut(5); linea.rtrim(); real lin(linea); if (!set_produttiv_linea(l, lin)) break; ok=TRUE; } else break; } else break; l++; } } if (!ok) { set_cod_linea(l,""); message_box(FR("Impossibile memorizzare piu' di %d righe"),l); } } class TDistinta_tables : public TTable_application { protected: virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool user_create(); virtual TString& get_mask_name(TString& name) const; virtual TMask * set_mask(TMask * _m); virtual void ini2sheet(TConfig& ini, TSheet_field &sheet); virtual void sheet2ini(TSheet_field &sheet,TConfig& ini); public: void rows2rel(const TMask& m); }; bool TDistinta_tables::user_create() { bool err = TTable_application::user_create(); if (get_tabname() == "LAV") { TLavorazione_tab *lav= new TLavorazione_tab; get_relation()->lfile().set_curr(lav); } return err; } TMask * TDistinta_tables::set_mask(TMask* _m) { TMask* mask = TTable_application::set_mask(_m); if (get_tabname() == "LAV") { if (!has_module(MRAUT)) mask->disable_page(1); } return mask; } TString& TDistinta_tables::get_mask_name(TString& name) const { name = get_tabname(); name.insert("dbtb", 0); return name; } int TDistinta_tables::read(TMask& m) { int err = TTable_application::read(m); if (err == NOERR) { if (get_tabname() == "LAV") { TLavorazione_tab &lav=(TLavorazione_tab &)get_relation()->curr(); TSheet_field& sheet = m.sfield(F_SHEET); if (sheet.shown()) { lav.fill_sheet(sheet); sheet.force_update(); } if (lav.get_real("R10").is_zero()) m.set(F_COSUNIT, lav.prezzo()); } } return err; } void TDistinta_tables::rows2rel(const TMask& m) { if (get_tabname() == "LAV") { TSheet_field& sheet = m.sfield(F_SHEET); TLavorazione_tab &lav=(TLavorazione_tab &)get_relation()->curr(); lav.put_sheet(sheet); } } int TDistinta_tables::write(const TMask& m) { rows2rel(m); int err = TTable_application::write(m); return err; } int TDistinta_tables::rewrite(const TMask& m) { rows2rel(m); int err = TTable_application::rewrite(m); return err; } void TDistinta_tables::ini2sheet(TConfig& ini, TSheet_field &sheet) { if (get_tabname() == "LAV") { TString8 para; for (int i = 0; ; i++) { para.format("%d,%d", LF_TAB, i+1); if (ini.set_paragraph(para)) { TToken_string& row = sheet.row(i); row.add(ini.get("CODLIN"), 0); row.add(ini.get("CODIMP"), 2); row.add(ini.get("LNUMPERS"), 3); row.add(ini.get("LPRODUTTIV"), 4); sheet.check_row(i); } else break; } } } void TDistinta_tables::sheet2ini(TSheet_field& sheet,TConfig& ini) { if (get_tabname() == "LAV") { TString8 para; FOR_EACH_SHEET_ROW(sheet, i, row) { para.format("%d,%d", LF_TAB, i+1); ini.set_paragraph(para); ini.set("CODLIN", row->get(0)); ini.set("CODIMP", row->get(2)); ini.set("LNUMPERS", row->get(3)); ini.set("LPRODUTTIV", row->get(4)); } for ( ; ; i++) { para.format("%d,%d", LF_TAB, i+1); if (ini.set_paragraph(para)) ini.remove_all(); else break; } } } /////////////////////////////////////////////////////////// // Main program /////////////////////////////////////////////////////////// int db0100(int argc, char* argv[]) { if (argc > 2) { TString name; name << TR("Tabella ") << argv[2]; TDistinta_tables dt; dt.run(argc, argv, name); } return 0; }