diff --git a/ps/pd0610100.cpp b/ps/pd0610100.cpp index 7d06d7806..b20777927 100755 --- a/ps/pd0610100.cpp +++ b/ps/pd0610100.cpp @@ -51,7 +51,10 @@ void TTabmod_caf_msk::riempi_sheet() row.add(codtab.mid(6), sheet.cid2index(S_ARTICOLO)); row.add(forn1, sheet.cid2index(S_FORN1)); row.add(forn2, sheet.cid2index(S_FORN2)); + sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_ARTICOLO)); + sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_DESART)); sheet.check_row(sheet.items()-1); + } sheet.force_update(); } @@ -64,7 +67,10 @@ void TTabmod_caf_msk::aggiungi_riga() TSheet_field& sheet = sfield(F_SHEET); TToken_string& row = sheet.row(-1); - row.add(cliente, sheet.cid2index(S_CLIENTE)); + + row.add(cliente, sheet.cid2index(S_CLIENTE)); + sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_ARTICOLO)); + sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_DESART)); sheet.force_update(); } @@ -89,18 +95,18 @@ void TTabmod_caf_msk::registra() } else { - long forn1 = 0; - long forn2 = 0; - const char* s1 = row.get(sheet.cid2index(S_FORN1)); - if (s1 != NULL) - forn1 = atol(s1); - const char* s2 = row.get(sheet.cid2index(S_FORN2)); - if (s2 != NULL) - forn2 = atol(s2); - caf.put("CODTAB", codtab); - caf.put("I0", forn1); - caf.put("I1", forn2); - caf.rewrite_write(); + const long forn1 = row.get_long(sheet.cid2index(S_FORN1)); + const long forn2 = row.get_long(sheet.cid2index(S_FORN2)); + + caf.put("CODTAB", codtab); + if (forn1 > 0 || forn2 > 0) + { + caf.put("I0", forn1); + caf.put("I1", forn2); + caf.rewrite_write(); + } + else + caf.remove(); } } riempi_sheet(); @@ -144,16 +150,26 @@ bool TTabmod_caf_msk::on_field_event(TOperable_field& o, TField_event e, long jo aggiungi_riga(); return false; } - if(e == se_query_del) - { - TSheet_field& sheet = (TSheet_field&)o; - TToken_string& row = sheet.row(jolly); - row.add("0", sheet.cid2index(S_FORN1)); - row.add("0", sheet.cid2index(S_FORN2)); - sheet.force_update(jolly); - TButton_field& button = (TButton_field&)sheet.sheet_mask().field(DLG_DELREC); - return on_field_event(button, fe_button, 1); - } + else + if (e == se_query_del) + { + TSheet_field& sheet = (TSheet_field&)o; + TToken_string& row = sheet.row(jolly); + row.add("0", sheet.cid2index(S_FORN1)); + row.add("0", sheet.cid2index(S_FORN2)); + sheet.force_update(jolly); + TButton_field& button = (TButton_field&)sheet.sheet_mask().field(DLG_DELREC); + return on_field_event(button, fe_button, 1); + } + else + if (e == se_leave) + { + TSheet_field& sheet = (TSheet_field&)o; + + sheet.disable_cell(jolly , sheet.cid2index(S_ARTICOLO)); + sheet.disable_cell(jolly , sheet.cid2index(S_DESART)); + } + break; case S_ARTICOLO: if(e == fe_modify) diff --git a/ps/pd0610200.cpp b/ps/pd0610200.cpp index 771d34745..6e4c0ceb6 100755 --- a/ps/pd0610200.cpp +++ b/ps/pd0610200.cpp @@ -118,16 +118,10 @@ public: void TOrdf_cache::discarding(const THash_object* obj) { TDocumento& doc = (TDocumento&)obj->obj(); - if (doc.physical_rows() > 1) - { - TRiga_documento& rdoc = doc[2]; - doc.put(DOC_CODCMS, rdoc.get(RDOC_CODCMS)); - doc.put(DOC_FASCMS, rdoc.get(RDOC_FASCMS)); - doc.put(DOC_CODCOSTO, rdoc.get(RDOC_CODCOSTO)); - int err = doc.rewrite(); - } - else + if (doc.physical_rows() == 0 || (doc.physical_rows() == 1 && doc[1].get(RDOC_TIPORIGA) == "05")) doc.remove(); + else + doc.rewrite(); } //KEY2OBJ:sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è @@ -147,8 +141,6 @@ TObject* TOrdf_cache::key2obj(const char* key) doc->put(DOC_CODCF, codcf); doc->put(DOC_DATADOC, _data); doc->put(DOC_DATACONS, _data); - - doc->cli2doc(); } else { @@ -280,48 +272,17 @@ const real TCrea_ordini_srm_app::cerca_prezzo(const char* codart, const long cod return prezzo; } -//CERCA_ORF: cerco se esistono degli ordini fornitori che arrivano dall'ordine cliente in esame -/*const void TCrea_ordini_srm_app::cerca_orf(TDoc_key& dadoc, const long daidriga, const long codfor, TDoc_key& ordf) -{ - TLocalisamfile rdoc(LF_RIGHEDOC); - - rdoc.setkey(4); - rdoc.put(RDOC_DAPROVV, dadoc.provv()); - rdoc.put(RDOC_DAANNO, dadoc.anno()); - rdoc.put(RDOC_DACODNUM, dadoc.codnum()); - rdoc.put(RDOC_DANDOC, dadoc.ndoc()); - rdoc.put(RDOC_DAIDRIGA, daidriga); - - const int err = rdoc.read(); - ordf = TDoc_key(0, "", 0, ' '); - - - if (err == NOERR) - { - const char provv = rdoc.get_char(RDOC_PROVV); - const int anno = rdoc.get_int(RDOC_ANNO); - const TString8 codnum = rdoc.get(RDOC_CODNUM); - const long ndoc = rdoc.get_long(RDOC_NDOC); - TToken_string key; - - key.add(provv); - key.add(anno); - key.add(codnum); - key.add(ndoc); - const long codcf = atol(cache().get(LF_DOC, key, DOC_CODCF)); - - if (codcf == codfor) - ordf = TDoc_key(anno, codnum, ndoc, provv); - } -} */ - //CERCA_ORF: cerco se esistono degli ordini fornitori che arrivano dall'ordine cliente in esame const bool TCrea_ordini_srm_app::cerca_orf(TDoc_key& dadoc, const long daidriga, const long codfor, TDoc_key& ordf) { TString query; query << "USE RDOC KEY 4\n" << "FROM DAPROVV=\"" << dadoc.provv() << "\" DAANNO=" << dadoc.anno() << " DACODNUM=\"" << dadoc.codnum() << "\" DANDOC=" << dadoc.ndoc() << " DAIDRIGA=" << daidriga << "\n" - << "TO DAPROVV=\"" << dadoc.provv() << "\" DAANNO=" << dadoc.anno() << " DACODNUM=\"" << dadoc.codnum() << "\" DANDOC=" << dadoc.ndoc() << " DAIDRIGA=" << daidriga; + << "TO DAPROVV=\"" << dadoc.provv() << "\" DAANNO=" << dadoc.anno() << " DACODNUM=\"" << dadoc.codnum() << "\" DANDOC=" << dadoc.ndoc(); + if (daidriga > 0) + query << " DAIDRIGA=" << daidriga << "\n"; + else + query << " DAIDRIGA=999999\n"; TISAM_recordset rdoc(query); @@ -398,19 +359,30 @@ void TCrea_ordini_srm_app::aggiorna_ordf(const TDocumento& ordc, const int nriga //CREA_ORDF: creo un nuovo ordine cliente TDoc_key * TCrea_ordini_srm_app::crea_ordf(const TDocumento& ordc, const long nriga, const long codfor, TOrdf_cache& ca) { - TDocumento& ordf = ca.doc(codfor); - TRiga_documento & row = ordf.new_row("05"); - TString rif; + TDoc_key kordf; + TDoc_key kdadoc(ordc.get_int(DOC_ANNO), ordc.get(DOC_CODNUM), ordc.get_long(DOC_NDOC), ordc.get_char(DOC_PROVV)); + TDocumento * wrk = cerca_orf(kdadoc, 0, codfor, kordf) ? &ca.doc(kordf) : &ca.doc(codfor); + TDocumento& ordf = *wrk; - ordc.riferimento(rif); - if (rif.empty()) - rif = ordc.tipo().descrizione(); - if (rif.full()) - rif << ' '; - rif << "n. " << ordc.numero(); - rif << " del " << ordc.get(DOC_DATADOC); + if (ordf.physical_rows() == 0) + { + ordf.cli2doc(); + ordf.put(DOC_CODCMS, ordc.get(DOC_CODCMS)); + ordf.put(DOC_CODCOSTO, ordc.get(DOC_CODCOSTO)); + ordf.put(DOC_FASCMS, ordc.get(RDOC_FASCMS)); + TRiga_documento & row = ordf.new_row("05"); + TString rif; + + ordc.riferimento(rif); + if (rif.empty()) + rif = ordc.tipo().descrizione(); + if (rif.full()) + rif << ' '; + rif << "n. " << ordc.numero(); + rif << " del " << ordc.get(DOC_DATADOC); - row.put(RDOC_DESCR, rif); + row.put(RDOC_DESCR, rif); + } ordini_fornitore(ordc, nriga, ordf); return new TDoc_key(ordf.get_int(DOC_ANNO), ordf.get(DOC_CODNUM), ordf.get_long(DOC_NDOC), ordf.get_char(DOC_PROVV)); } @@ -445,30 +417,46 @@ void TCrea_ordini_srm_app::elimina_righe(const TDocumento& ordc, const TAssoc_ar const int daidriga = rdoc.get(RDOC_DAIDRIGA).as_int(); const int nriga = rdoc.get(RDOC_NRIGA).as_int(); TDoc_key kordf(rdoc.get(RDOC_ANNO).as_int(), rdoc.get(RDOC_CODNUM).as_string(), rdoc.get(RDOC_NDOC).as_int(), rdoc.get(RDOC_PROVV).as_string()[0]); + TDocumento& ordf = ca.doc(kordf); + const long codfor = ordf.get_long(DOC_CODCF); bool trovato = false; if (ords.is_key(kordf)) { - for(int i = 1; i <= ordc.rows(); i++) + for(int i = 1; i <= ordc.physical_rows(); i++) { TRiga_documento rdoc = ordc[i]; - if(daidriga == rdoc.get_long(RDOC_IDRIGA)) - trovato = true; + if (daidriga == rdoc.get_long(RDOC_IDRIGA)) + { + trovato = rdoc.get_long(RDOC_CODAGG1) == codfor; + trovato |= rdoc.get_long(RDOC_CODAGG2) == codfor; + break; + } } } if (!trovato) - { - TDocumento& ordf = ca.doc(kordf); - ordf.destroy_row(nriga, true); - } + ordf.put(RDOC_NRIGA, 0); + } + for(bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) + { + TDoc_key kordf(rdoc.get(RDOC_ANNO).as_int(), rdoc.get(RDOC_CODNUM).as_string(), rdoc.get(RDOC_NDOC).as_int(), rdoc.get(RDOC_PROVV).as_string()[0]); + TDocumento& ordf = ca.doc(kordf); + + for(int i = 1; i <= ordf.physical_rows(); i++) + { + if (ordf.get_int(RDOC_NRIGA) == 0) + ordf.destroy_row(nriga, true); + } + for (int i = 1; i <= ordf.physical_rows(); i++) + ordf.put(RDOC_NRIGA, i); } } //ELABORA_ORDINI_CLIENTE: scorro il file ini e aggiungo alla tabella dei listini le righe mancanti void TCrea_ordini_srm_app::elabora_ordini_cliente() -{ +{ TConfig ini(_ini_name, "33"); TString4 para; para.format("%d", LF_DOC); const char provv = ini.get_char(DOC_PROVV, para); @@ -565,9 +553,6 @@ bool TCrea_ordini_srm_app::load_ini(bool check) void TCrea_ordini_srm_app::main_loop() //definizione della member function main_loop, della classe TCrea_ordini_srm_app { -#ifdef DBG - message_box("start program"); -#endif TString sw(argv(2)); sw.upper(); const bool chk_doc = sw == "-V";