From 738e5d96f94a7a87d0c0508dac985032c5f09405 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 19 Dec 2010 09:00:58 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Creazione ordini fornitore SRM git-svn-id: svn://10.65.10.50/branches/R_10_00@21333 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/pd0610200.cpp | 169 +++++++++++++++++++++++++++++++---------------- 1 file changed, 111 insertions(+), 58 deletions(-) diff --git a/ps/pd0610200.cpp b/ps/pd0610200.cpp index 2599e1519..771d34745 100755 --- a/ps/pd0610200.cpp +++ b/ps/pd0610200.cpp @@ -118,11 +118,16 @@ public: void TOrdf_cache::discarding(const THash_object* obj) { TDocumento& doc = (TDocumento&)obj->obj(); - TRiga_documento& rdoc = doc[1]; - 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(); + 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 + doc.remove(); } //KEY2OBJ:sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è @@ -211,16 +216,14 @@ protected: virtual void main_loop(); const real cerca_prezzo(const char* codart, const long codcf); - - const bool cerca_orf(TDoc_key& dadoc, const long daidriga, const long for1, const long for2, TDoc_key& ordf1, TDoc_key& ordf2); - + const bool cerca_orf(TDoc_key& dadoc, const long daidriga, const long codfor, TDoc_key& ordf); void aggiorna_righe(TDocumento& ordf, const TDocumento& ordc, TRiga_documento& rordc, TRiga_documento& rordf, int idrigac); void ordini_fornitore(const TDocumento& ordc, const int nriga, TDocumento& ordf); void aggiorna_ordf(const TDocumento& ordc, const int nriga, const TDoc_key& adoc, TOrdf_cache& ca); - void crea_ordf(const TDocumento& ordc, const long nriga, const long codfor, TOrdf_cache& ca); + TDoc_key * crea_ordf(const TDocumento& ordc, const long nriga, const long codfor, TOrdf_cache& ca); void elimina_ordf(const TDoc_key& adoc, TOrdf_cache& ca); - void elimina_righe(const TDocumento& ordc, TOrdf_cache& ca); + void elimina_righe(const TDocumento& ordc, const TAssoc_array & ords, TOrdf_cache& ca); void elabora_ordini_cliente(); @@ -278,10 +281,43 @@ const real TCrea_ordini_srm_app::cerca_prezzo(const char* codart, const long cod } //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 for1, const long for2, TDoc_key& ordf1, TDoc_key& ordf2) +/*const void TCrea_ordini_srm_app::cerca_orf(TDoc_key& dadoc, const long daidriga, const long codfor, TDoc_key& ordf) { - bool trovato = false; + 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" @@ -300,16 +336,14 @@ const bool TCrea_ordini_srm_app::cerca_orf(TDoc_key& dadoc, const long daidriga, const long codcf = atol(cache().get(LF_DOC, key, DOC_CODCF)); - if(for1 > 0 && codcf == for1 && ordf1.empty()) - ordf1 = key; - - if(for2 > 0 && codcf == for2 && ordf2.empty()) - ordf2 = key; - - trovato = true; + if(codcf == codfor) + { + ordf = key; + return true; + } } - return trovato; + return false; } //AGGIORNA_RIGHE: riempie le righe dell'ordine fornitore con i dati corretti @@ -362,15 +396,23 @@ void TCrea_ordini_srm_app::aggiorna_ordf(const TDocumento& ordc, const int nriga } //CREA_ORDF: creo un nuovo ordine cliente -void TCrea_ordini_srm_app::crea_ordf(const TDocumento& ordc, const long nriga, const long codfor, TOrdf_cache& ca) +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; - ordc.tipo().riferimento(ordc, 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); 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)); } //ELIMINA_ORDF: aggiorno l'ordine fornitore che esiste già in base alle modifiche fatte sull'ordine cliente attuale @@ -378,11 +420,11 @@ void TCrea_ordini_srm_app::elimina_ordf(const TDoc_key& adoc, TOrdf_cache& ca) { TDocumento& ordf = ca.doc(adoc); - ordf.remove(); + ordf.destroy_rows(); } //ELIMINA_RIGHE: elimino le righe dagli ordini fornitore che non compaiono più nell'ordine cliente in esame -void TCrea_ordini_srm_app::elimina_righe(const TDocumento& ordc, TOrdf_cache& ca) +void TCrea_ordini_srm_app::elimina_righe(const TDocumento& ordc, const TAssoc_array & ords, TOrdf_cache& ca) { const char provv = ordc.get_char(DOC_PROVV); const int anno = ordc.get_int(DOC_ANNO); @@ -402,20 +444,22 @@ void TCrea_ordini_srm_app::elimina_righe(const TDocumento& ordc, TOrdf_cache& ca { 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]); bool trovato = false; - for(int i = 1; i <= ordc.rows(); i++) - { - TRiga_documento rdoc = ordc[i]; + if (ords.is_key(kordf)) + { + for(int i = 1; i <= ordc.rows(); i++) + { + TRiga_documento rdoc = ordc[i]; - if(daidriga == rdoc.get_long(RDOC_IDRIGA)) - trovato = true; - } - - if(!trovato) + if(daidriga == rdoc.get_long(RDOC_IDRIGA)) + trovato = true; + } + } + if (!trovato) { - 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); ordf.destroy_row(nriga, true); } @@ -431,10 +475,11 @@ void TCrea_ordini_srm_app::elabora_ordini_cliente() const int anno = ini.get_int(DOC_ANNO, para); const TString& codnum = ini.get(DOC_CODNUM, para); const long ndoc = ini.get_long(DOC_NDOC, para); + const bool delete_docs = ini.get(DOC_NOTE, para) == "DELETING"; TDoc_key dadoc(anno, codnum, ndoc, provv); - TDoc_key ordf1; - TDoc_key ordf2; + TDoc_key ordf; + TAssoc_array ords; TDocumento ordc(provv, anno, codnum, ndoc); @@ -450,39 +495,44 @@ void TCrea_ordini_srm_app::elabora_ordini_cliente() const long codfor2 = rordc.get_long(RDOC_CODAGG2); //da prendere dalla riga const int idrigac = rordc.get_int(RDOC_IDRIGA); - if (ordc.stato() == ' ') + if (codfor1 > 0) { - if(cerca_orf(dadoc, idrigac, codfor1, codfor2, ordf1, ordf2)) + if(cerca_orf(dadoc, idrigac, codfor1, ordf)) { - if(codfor1 > 0) - elimina_ordf(ordf1, ca); - - if(codfor2 > 0) - elimina_ordf(ordf2, ca); - } - } - else - { - if(cerca_orf(dadoc, idrigac, codfor1, codfor2, ordf1, ordf2)) - { - if(codfor1 > 0) - aggiorna_ordf(ordc, i, ordf1, ca); - - if(codfor2 > 0) - aggiorna_ordf(ordc, i, ordf2, ca); + if (delete_docs) + elimina_ordf(ordf, ca); + else + aggiorna_ordf(ordc, i, ordf, ca); + ords.add(ordf, ordf); } else { - if(codfor1 > 0) - crea_ordf(ordc, i, codfor1, ca); + TDoc_key * ordf = crea_ordf(ordc, i, codfor1, ca); + + ords.add(*ordf, ordf); + } + } + if (codfor2 > 0) + { - if(codfor2 > 0) - crea_ordf(ordc, i, codfor2, ca); + if(cerca_orf(dadoc, idrigac, codfor2, ordf)) + { + if (delete_docs) + elimina_ordf(ordf, ca); + else + aggiorna_ordf(ordc, i, ordf, ca); + ords.add(ordf, ordf); + } + else + { + TDoc_key * ordf = crea_ordf(ordc, i, codfor2, ca); + + ords.add(*ordf, ordf); } } } - elimina_righe(ordc, ca); + elimina_righe(ordc, ords, ca); ca.destroy(); } @@ -515,6 +565,9 @@ 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";