From 259d007550718a19472c47be2067f2561865f80b Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 11 Jun 2009 01:02:50 +0000 Subject: [PATCH] Patch level : 10.0 332 Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento Esteso l'handler sulla data di consegna ora duplica la riga se non puo' generare le date di scadenza git-svn-id: svn://10.65.10.50/trunk@19005 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/velib06a.cpp | 157 +++++++++++++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 62 deletions(-) diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 2d17920af..ce82c94f2 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -471,89 +471,122 @@ bool dcons_handler( TMask_field& f, KEY key ) TMask& row_mask = f.mask(); TSheet_field& s = *row_mask.get_sheet(); TDocumento_mask & mask = (TDocumento_mask &) s.mask(); - int r = f.mask().get_sheet()->selected() + 1; - + const int r0 = f.mask().get_sheet()->selected() + 1; + int r = r0 + 1; + TDocumento & doc = mask.doc(); + bool multiple_rows = (r <= doc.physical_rows()); + if (r > 1) { - TDocumento & doc = mask.doc(); - const TRiga_documento& prev = doc[r - 1]; - TDate first_date = prev.get_date(RDOC_DATACONS); - TDate second_date = row_mask.get_date(FR_DATACONS); - - if (!second_date.ok()) - second_date = mask.get_date(F_DATACONS); - if (second_date.ok()) + if (multiple_rows) { - if (!first_date.ok()) - first_date = mask.get_date(F_DATACONS); - if (first_date.ok()) + const TString codart = doc[r].get(RDOC_CODART); + + multiple_rows = codart == doc[r0].get(RDOC_CODART); + } + + if (multiple_rows) + { + const TRiga_documento& prev = doc[r - 1]; + TDate first_date = prev.get_date(RDOC_DATACONS); + TDate second_date = doc[r].get_date(RDOC_DATACONS); + + if (!second_date.ok()) + second_date = mask.get_date(F_DATACONS); + if (second_date.ok()) { - if (second_date.is_end_month() && first_date.is_end_month()) + if (!first_date.ok()) + first_date = mask.get_date(F_DATACONS); + if (first_date.ok()) { - int year = second_date.year(); - int month = second_date.month(); - const int months = ( year * 12 + month) - (first_date.year() * 12 + first_date.month()); - if (months > 0) + if (second_date.is_end_month() && first_date.is_end_month()) { - for (r++ ; r <= doc.physical_rows(); r++) - { - TRiga_documento & riga = doc[r]; - TToken_string & tr = s.row(r - 1); - - month += months; - if (month > 12) - { - year++; - month -= 12; - } - TDate d(1, month, year); - - d.set_end_month(); - riga.put(RDOC_DATACONS, d); - tr.add(riga.get(RDOC_DATACONS), s.cid2index(FR_DATACONS)); - } - s.force_update(); - } - - } - else - if (second_date.day() == first_date.day()) - { - const int months = ( second_date.year() * 12 + second_date.month()) - (first_date.year() * 12 + first_date.month()); + int year = second_date.year(); + int month = second_date.month(); + const int months = ( year * 12 + month) - (first_date.year() * 12 + first_date.month()); + const TString80 cod = doc[r].get(RDOC_CODART); if (months > 0) { - for (r++ ; r <= doc.physical_rows(); r++) + for (r++ ; r <= doc.physical_rows() && cod == doc[r].get(RDOC_CODART); r++) { TRiga_documento & riga = doc[r]; TToken_string & tr = s.row(r - 1); - second_date.addmonth(months); - riga.put(RDOC_DATACONS, second_date); + month += months; + if (month > 12) + { + year++; + month -= 12; + } + TDate d(1, month, year); + + d.set_end_month(); + riga.put(RDOC_DATACONS, d); tr.add(riga.get(RDOC_DATACONS), s.cid2index(FR_DATACONS)); } s.force_update(); } + } else - { - const int days = second_date - first_date; - - if (days > 0) + if (second_date.day() == first_date.day()) { - for (r++ ; r <= doc.physical_rows(); r++) + const int months = ( second_date.year() * 12 + second_date.month()) - (first_date.year() * 12 + first_date.month()); + if (months > 0) { - TRiga_documento & riga = doc[r]; - TToken_string & tr = s.row(r - 1); + const TString80 cod = doc[r].get(RDOC_CODART); + for (r++ ; r <= doc.physical_rows() && cod == doc[r].get(RDOC_CODART); r++) + { + TRiga_documento & riga = doc[r]; + TToken_string & tr = s.row(r - 1); - second_date += days; - riga.put(RDOC_DATACONS, second_date); - tr.add(riga.get(RDOC_DATACONS), s.cid2index(FR_DATACONS)); + second_date.addmonth(months); + riga.put(RDOC_DATACONS, second_date); + tr.add(riga.get(RDOC_DATACONS), s.cid2index(FR_DATACONS)); + } + s.force_update(); } - s.force_update(); } - } + else + { + const int days = second_date - first_date; + + if (days > 0) + { + const TString80 cod = doc[r].get(RDOC_CODART); + for (r++ ; r <= doc.physical_rows() && cod == doc[r].get(RDOC_CODART); r++) + { + TRiga_documento & riga = doc[r]; + TToken_string & tr = s.row(r - 1); + + second_date += days; + riga.put(RDOC_DATACONS, second_date); + tr.add(riga.get(RDOC_DATACONS), s.cid2index(FR_DATACONS)); + } + s.force_update(); + } + } + } } } + else + { + TRiga_documento & riga = doc.insert_row(r, doc[r - 1].tipo().codice()); + + TDocumento::copy_data(riga, doc[r - 1]); + s.insert(r - 1); + s.select(r - 1); + + TToken_string & tr = s.row(r - 1); + + riga.zero(RDOC_QTA); + riga.zero(RDOC_DATACONS); + riga.autoload(s); +// tr.add("", s.cid2index(FR_QTA)); +// tr.add("", s.cid2index(FR_DATACONS)); + s.check_row(r - 1); + s.force_update(); + } } } return true; @@ -2294,8 +2327,8 @@ bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key) (const char *)m.get(F_CODNUM), m.get_int(F_ANNO)); cur.setfilter(filter); TToken_string siblings; - TToken_string header(HR("Codice|Ragione Sociale@50|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta")); - TToken_string fieldlist("CODCF|20->RAGSOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|G1:TOTDOC|CODVAL"); + TToken_string header(HR("Codice|Ragione Sociale@50|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta|Stato")); + TToken_string fieldlist("CODCF|20->RAGSOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|G1:TOTDOC|CODVAL|STATO"); if (__header == "883") { @@ -2343,8 +2376,8 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key) cur.setfilter(filter, true); TToken_string siblings; - TToken_string header(HR("Ragione Sociale@50|Codice|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta|Partita IVA")); - TToken_string fieldlist("20->RAGSOC|CODCF|NDOC|DATADOC|G1:TOTDOC|CODVAL|20->PAIV"); + TToken_string header(HR("Ragione Sociale@50|Codice|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta|Stato|Partita IVA")); + TToken_string fieldlist("20->RAGSOC|CODCF|NDOC|DATADOC|G1:TOTDOC|CODVAL|STATO|20->PAIV"); if (__header == "883") {