From f22933c42b020fff947c29fcd74424fb54fe9b8f Mon Sep 17 00:00:00 2001 From: smen Date: Mon, 5 Jun 2023 12:20:33 +0200 Subject: [PATCH] Patch level : 12.0 Files correlati : f90600.cpp f90600.h Commento: BUGFIX ABBINAMENTO MOVIMENTI DI ACQUISTO a seguito test ICSFIRPOO --- src/f9/f90600.cpp | 139 ++++++++++++++++++++++++++++++++++++++++++++-- src/f9/f90600.h | 2 + 2 files changed, 136 insertions(+), 5 deletions(-) diff --git a/src/f9/f90600.cpp b/src/f9/f90600.cpp index dc77b6ac1..aeeb772ed 100644 --- a/src/f9/f90600.cpp +++ b/src/f9/f90600.cpp @@ -577,8 +577,25 @@ void TControlloIntegrazioni_mask::associa() // todo: levare gli ultimi residui warning_box("Selezionare prima un movimento e una fattura elettronica."); return; } + + int numreg = mov_sel->get_int(cid2index(F_CNUMREG)); + TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg); + + TToken_string keys(fat_sel->get(cid2index(F_FPROKEYS)), ';'); - const bool ok = associa_int_ven(mov_sel->get_int(cid2index(F_CNUMREG)), keys); + bool ok = true; + char c = _tipo_doc_err; + + //DAT CAPIRE COME TIRARE FUORI TIPO IVA ESTR + if (_tipo_doc_err == 'A') + { + ok &= associa_int_acq(mov_sel->get_int(cid2index(F_CNUMREG)), keys); + } + else + { + ok &= associa_int_ven(mov_sel->get_int(cid2index(F_CNUMREG)), keys); + } + if (ok) { // Tolgo il flag di in errore sul vettore in modo da rifare la fill e non venir piu' contato come da controllare @@ -614,6 +631,29 @@ bool TControlloIntegrazioni_mask::associa_int_ven(const long numreg, TToken_stri return ok; } +bool TControlloIntegrazioni_mask::associa_int_acq(const long numreg, TToken_string key_fppro) +{ + TRectype & mov = (TRectype &)cache().get(LF_MOV, numreg); + bool ok = mov.full(); + ok &= key_fppro.full(); + + if (ok) // Scrivo sul movimento il riferimento al fppro + { + //mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc()); + //mov.put(MOV_DATADOCSDI, fppro_db().get_datadoc()); + mov.put(MOV_KEYFPPRO, key_fppro); + ok = mov.rewrite() == NOERR; + } + else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro + { + //mov.zero(MOV_IDDOCSDI); + //mov.zero(MOV_DATADOCSDI); + mov.zero(MOV_KEYFPPRO); + mov.rewrite(); + } + return ok; +} + TToken_string* TControlloIntegrazioni_mask::selected_mov() { TSheet_field& movs = sfield(S_CONTROLLO); @@ -666,7 +706,12 @@ void TControlloIntegrazioni_mask::fill_sheets() sf.force_update(); // Fill fppro sheet - fill_pafw300_sheet(); + if (_tipo_doc_err == 'A') + fill_fppro_sheet(); + else + fill_pafw300_sheet(); + + } void TControlloIntegrazioni_mask::fill_pafw300_sheet(bool filter) @@ -744,6 +789,81 @@ void TControlloIntegrazioni_mask::fill_pafw300_sheet(bool filter) sf.force_update(); } +void TControlloIntegrazioni_mask::fill_fppro_sheet(bool filter) +{ + TSheet_field& sf = sfield(S_FPPRO); + + sf.reset(); + const char* order; + switch (_ordin) + { + default: + case 'D': order = "P7_DATA"; break; + case 'N': order = "P7_NUMERO"; break; + case 'F': order = "FORNITORE"; break; + case 'R': order = "P2_ANADENOMIN"; break; + case 'P': order = "P2_FISCIVACOD"; break; + } + TString query; + query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT,\n" << + "PZ_TIPODOC AS TIPODOC, P7_DATA AS DATA, P7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC,\n" << + "PZ_CLIFOR AS FORNITORE, " << + "P2_ANADENOMIN AS RAGSOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << + "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << + "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << + "JOIN FPPRO00F ON PQ_KEYPRGINVIO = PZ_KEYPRGINVIO AND PQ_KEYHEADERFATT = PZ_KEYHEADERFATT AND PQ_KEYBODYFATT = PZ_KEYBODYFATT\n" << + "WHERE PZ_DATA > '20211201'" << "\n"; + + if (filter) + { + if (!_flt_da_data.empty()) + query << "AND P7_DATA >= '" << _flt_da_data.date2ansi() << "'"; + else + query << "AND P7_DATA >= '20010101'"; + + if (!_flt_a_data.empty()) + query << "AND P7_DATA <= '" << _flt_a_data.date2ansi() << "'\n"; + else + query << "AND P7_DATA <= '" << today.date2ansi() << "'\n"; + + if (!_flt_tipodoc.empty()) + query << "AND PZ_TIPODOC = '" << _flt_tipodoc << "'\n"; + if (!_flt_numdoc.empty()) + query << "AND P7_NUMERO like '%" << _flt_numdoc << "%'\n"; + if (!_flt_tot_doc_da.is_zero()) + query << "AND PQ_IMPTOTDOC >= '" << _flt_tot_doc_da << "'\n"; + if (!_flt_tot_doc_a.is_zero()) + query << "AND PQ_IMPTOTDOC <= '" << _flt_tot_doc_a << "'\n"; + if (!_flt_ragsoc.empty()) + query << "AND P2_ANADENOMIN like '%" << _flt_ragsoc << "%'\n"; + if (!_flt_codforn.empty()) + query << "AND PZ_CLIFOR = '" << _flt_codforn << "'\n"; + if (!_flt_piva.empty()) + query << "AND P2_FISCIVACOD = '" << _flt_piva << "'\n"; + } + + query << "ORDER BY " << order << " " << (_verso == 'A' ? "ASC" : "DESC") << "\n"; + fp_db().sq_set_exec(query, false); + + for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) + { + const int row = sf.set_row_cell(F_FTIPODOC, fp_db().sq_get("TIPODOC")); + + sf.set_row_cell(F_FDATA, fp_db().sq_get_date("DATA"), row); + sf.set_row_cell(F_FNUMDOC, fp_db().sq_get("NUMDOC"), row); + sf.set_row_cell(F_FIMPTOTDOC, fp_db().sq_get("IMPTOTDOC"), row); + sf.set_row_cell(F_FFORNITORE, fp_db().sq_get("CLIENTE"), row); + sf.set_row_cell(F_FRAGSOC, fp_db().sq_get("RAGSOC"), row); + sf.set_row_cell(F_FSTATOPIVA, fp_db().sq_get("STATOPIVA"), row); + sf.set_row_cell(F_FPIVA, fp_db().sq_get("PIVA"), row); + TString s = fp_db().sq_get("KEYPRGINVIO"); + s << ";" << fp_db().sq_get("KEYHEADERFATT") << ";" << fp_db().sq_get("KEYBODYFATT"); + sf.set_row_cell(F_FPROKEYS, s, row); + + } + sf.force_update(); +} + void TControlloIntegrazioni_mask::open_win_filter() { TMask& m = get_win_filter(); @@ -847,7 +967,10 @@ bool TControlloIntegrazioni_mask::on_field_event(TOperable_field& o, TField_even if (e == fe_button) { open_win_filter(); - fill_pafw300_sheet(true); + if (_tipo_doc_err == 'V') + fill_pafw300_sheet(true); + else + fill_fppro_sheet(true); field(B_FILTER_OFF).enable(); field(B_FILTER_ON).disable(); } @@ -855,7 +978,10 @@ bool TControlloIntegrazioni_mask::on_field_event(TOperable_field& o, TField_even case B_FILTER_ON: if (e == fe_button) { - fill_pafw300_sheet(true); + if (_tipo_doc_err == 'V') + fill_pafw300_sheet(true); + else + fill_fppro_sheet(true); field(B_FILTER_OFF).enable(); field(B_FILTER_ON).disable(); } @@ -863,7 +989,10 @@ bool TControlloIntegrazioni_mask::on_field_event(TOperable_field& o, TField_even case B_FILTER_OFF: if (e == fe_button) { - fill_pafw300_sheet(false); + if (_tipo_doc_err == 'V') + fill_pafw300_sheet(false); + else + fill_fppro_sheet(false); field(B_FILTER_ON).enable(); field(B_FILTER_OFF).disable(); } diff --git a/src/f9/f90600.h b/src/f9/f90600.h index c894922f7..ccc5aa515 100644 --- a/src/f9/f90600.h +++ b/src/f9/f90600.h @@ -133,11 +133,13 @@ class TControlloIntegrazioni_mask : public TAutomask void associa(); bool associa_int_ven(const long numreg, TToken_string key_paf); + bool associa_int_acq(const long numreg, TToken_string key_fppro); //void conferma_esclusi() const; TArray& import_error_list(); void fill_sheets(); void fill_pafw300_sheet(bool filter = false); + void fill_fppro_sheet(bool filter = false); TMask& get_win_filter(); void open_win_filter();