From 8ecd229662c32bc6a2ea90e62e1083784c06694a Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 1 Feb 2010 15:00:50 +0000 Subject: [PATCH] Patch level : 10.0 602 Files correlati : lv2.exe Ricompilazione Demo : [ ] Commento : Sort delle fatture, corretto doppionolo se ci sono due articoli uguali git-svn-id: svn://10.65.10.50/trunk@20036 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2500.cpp | 46 +++++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/lv/lv2500.cpp b/lv/lv2500.cpp index f7dac2e95..4e63a43c0 100755 --- a/lv/lv2500.cpp +++ b/lv/lv2500.cpp @@ -298,6 +298,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do bool elcons = contr.get_bool(LVCONDV_ELCONS); bool rifbol = contr.get_bool(LVCONDV_RIFBOL); bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest"); + TAssoc_array nolo_computed; if (doc.physical_rows() > 0 && doc[1].is_descrizione()) { @@ -574,9 +575,10 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do //di partenza, poi costruisco la descrizione in base alla periodicità di fatturazione, //metto la qta uguale alla dotazione che ho appena letto //e prendo il prezzo nolo dalla riga contratto - if (dot != ZERO) + if (dot != ZERO && nolo_computed.objptr(codart) == NULL) { TRiga_documento& nolorow = doc.insert_row(++i, "01"); + nolo_computed.add(codart, codart); doc.copy_data(nolorow, rout); TString80 descr("Nolo"); const int contrper = contr.get_int(LVCONDV_PERFAT); @@ -753,17 +755,27 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do break; case 5: //forfait = FISSO SU DOTAZIONE INIZIALE { - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); - rout.put(RDOC_QTA, reclav.get_real("DOTIN")); - const TString80 codartorig=rout.get(RDOC_CODART); + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); + const real dotin = reclav.get_real("DOTIN"); - for (int h = doc.physical_rows(); h > i; h--) - { - TRiga_documento& delrow = doc[h]; - const TString80 codart=delrow.get(RDOC_CODART); - if ( codartorig == codart) - doc.destroy_row(h, true); - } + rout.put(RDOC_QTA, dotin); + + if (rout.get(RDOC_DESCR).blank()) + { + const TString & descr = cached_article(codart).get(RDOC_DESCR); + + rout.put(RDOC_DESCR, descr); + } + + const TString80 codartorig=rout.get(RDOC_CODART); + + for (int h = doc.physical_rows(); h > i; h--) + { + TRiga_documento& delrow = doc[h]; + const TString80 codart=delrow.get(RDOC_CODART); + if ( codartorig == codart) + doc.destroy_row(h, true); + } } break; default: break; @@ -979,6 +991,8 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do } if (to_delete || doc.totale_doc() == ZERO) doc_out.destroy(id); + else + doc.sort_rows(RDOC_CODART); } for (int id = doc_out.items() - 1; id >= 0 ; id--) { @@ -1066,9 +1080,11 @@ TRiga_documento& TFatturazione_lavanderie::find_or_create_row(TDocumento& doc_ou //scorro le righe documetno for (r = doc_out.physical_rows(); r > 0; r--) + { //se trovo una riga raggruppabile e di lavanderia, allora interrompo il ciclo if (doc_out[r].raggruppabile(rin, _campi_raggruppamento) && (doc_out[r].get_char("LVTYPE") == lavtype)) break; + } //se non ho trovato la riga, ne creo una nuova if (r <= 0) @@ -1195,7 +1211,7 @@ void TFatturazione_lavanderie::create_row(TDocumento& doc_out, const TRiga_docum //per il suo segno al prezzo ricavato sopra o da contratto (o da magazzino), o da bolla if (!sgndotin.is_zero() && !sgncons.is_zero()) { - TRiga_documento& rc = find_or_create_row(doc_out, rin, 'I'); + TRiga_documento& rc = find_or_create_row(doc_out, rin, 'C'); rc.add(RDOC_QTA, sgndotin * qta); rc.put(RDOC_PREZZO, prezzo); } @@ -1326,6 +1342,7 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion const long codcf = contratto.get_long(LVCONDV_CODCF); const int codcont = contratto.get_int(LVCONDV_CODCONT); + const bool fattnocons = !contratto.get_bool(LVCONDV_FORFNOCONS); doc.put(DOC_CODCF, codcf); TToken_string key("C"); @@ -1434,8 +1451,11 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion for(bool ok = rcont.move_first(); ok; ok = rcont.move_next()) { TRectype& riga = rcont.cursor()->curr(); + const int tipoforf = riga.get_int(LVRCONDV_TIPOFORF); - if (riga.get_int(LVRCONDV_TIPOFORF) == 2) + if (tipoforf > 0 && + ((tipoforf == 2) || + (tipoforf != 2 && fattnocons))) { TRiga_documento& rdoc = doc.new_row("21");