From 9e26e4d527d4235a8494bb603c80fbd1cc690728 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 26 Mar 2008 11:24:36 +0000 Subject: [PATCH] Patch level : 4.0 911 Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1010 git-svn-id: svn://10.65.10.50/trunk@16373 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/bolle.trr | 3 +- ve/fatture.trr | 3 +- ve/ve1100a.uml | 12 +++- ve/ve5600.cpp | 1 + ve/ve6200.cpp | 32 ++++----- ve/ve6200.h | 26 +++++++ ve/ve6500.cpp | 65 ++++++++++++++++-- ve/vearea.men | 1 + ve/velib.h | 7 +- ve/velib03.cpp | 125 +++++++++++++++++++++++++++++++--- ve/velib03a.cpp | 32 ++++++++- ve/velib04.cpp | 3 +- ve/velib04.h | 21 +++++- ve/velib04a.cpp | 150 ++++++++++++++++++++++------------------- ve/velib04d.cpp | 176 ++++++++++++++++++++++++++++++++++++++++++------ ve/velib04d.h | 2 + ve/velib04d.uml | 16 ++++- ve/velib06a.cpp | 64 +++++++++++------- ve/vepriv.h | 2 +- ve/verig.uml | 9 +++ ve/verig01.uml | 1 + ve/verigdef.h | 2 + ve/vesirio1.cpp | 4 +- ve/vetbeld.h | 5 +- ve/vetbeld.uml | 56 +++++++++++---- ve/vetbnum.uml | 5 ++ ve/vetbprs.h | 2 +- ve/vetbprs.uml | 7 ++ ve/vetbspp.h | 1 + ve/vetbspp.uml | 8 +++ ve/vetbtip.uml | 2 + 31 files changed, 664 insertions(+), 179 deletions(-) create mode 100755 ve/ve6200.h diff --git a/ve/bolle.trr b/ve/bolle.trr index b424e6fde..05dee5baf 100755 --- a/ve/bolle.trr +++ b/ve/bolle.trr @@ -1,5 +1,5 @@ 1001 -101 +100 I5CDEP|1|3|0|CODICE DEPOSITO I5CCLI|3|6|0|CODICE CLIENTE I5FLCO|1|1|0|FLAG CLIENTE CORRISPETTIVO @@ -100,6 +100,5 @@ I5FELA|1|1|0|ELABORATO I5CNOS|1|2|0|COD.NUM. DOCUMENTO SPED. I5NDOS|3|7|0|NUMERO DOCUMENTO SPED. I5UDOS|3|8|0|DATA DOCUMENTO SPED. -I5AREA|1|100|0|AREA PERSONALIZZABILE 1 I5TDO1+I5CNMV+I5NDOC| diff --git a/ve/fatture.trr b/ve/fatture.trr index 43e33ac72..17430a3a7 100755 --- a/ve/fatture.trr +++ b/ve/fatture.trr @@ -1,5 +1,5 @@ 1003 -101 +100 I5CDEP|1|3|0|CODICE DEPOSITO I5CCLI|3|6|0|CODICE CLIENTE I5FLCO|1|1|0|FLAG CLIENTE CORRISPETTIVO @@ -100,6 +100,5 @@ I5FELA|1|1|0|ELABORATO I5CNOS|1|2|0|COD.NUM. DOCUMENTO SPED. I5NDOS|3|7|0|NUMERO DOCUMENTO SPED. I5UDOS|3|8|0|DATA DOCUMENTO SPED. -I5AREA|1|100|0|AREA PERSONALIZZABILE 1 I5TDO1+I5CNMV+I5NDOC| diff --git a/ve/ve1100a.uml b/ve/ve1100a.uml index 9eb6228b4..20c351f39 100755 --- a/ve/ve1100a.uml +++ b/ve/ve1100a.uml @@ -138,13 +138,21 @@ END BUTTON DLG_PRINT 10 2 BEGIN - PROMPT -12 -1 "~Stampa" + PROMPT -13 -1 "~Stampa" MESSAGE EXIT,K_ENTER END +BUTTON DLG_EMAIL 10 2 +BEGIN + PROMPT -23 -1 "~Mail" + PICTURE BMP_EMAIL + MESSAGE EXIT,77 + FLAGS "H" +END + BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -22 -1 "" + PROMPT -33 -1 "" END ENDPAGE diff --git a/ve/ve5600.cpp b/ve/ve5600.cpp index ca63cb1ed..c301d89b4 100755 --- a/ve/ve5600.cpp +++ b/ve/ve5600.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/ve/ve6200.cpp b/ve/ve6200.cpp index 8a3012486..e53337277 100755 --- a/ve/ve6200.cpp +++ b/ve/ve6200.cpp @@ -1,8 +1,7 @@ -#include -#include #include #include "velib04.h" +#include "ve6200.h" #include "ve6200a.h" #include @@ -299,20 +298,6 @@ int TLista_clifo::add(long cod) // TFatturazione_bolle_app /////////////////////////////////////////////////////////// -class TFatturazione_bolle_app : public TSkeleton_application -{ - TString4 _default_selection; - -protected: - virtual bool create(); - virtual void main_loop(); - - bool process(TIndwin& iw, TFatturazione_bolle& eld, TLista_documenti& din, const TDate& data_elab); - void process_by_cli(const TMask& m); - void process_by_ragsoc(const TMask& m); - void process_by_doc(const TMask& m); -}; - bool TFatturazione_bolle_app::create() { open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN, @@ -325,7 +310,7 @@ bool TFatturazione_bolle_app::create() return TSkeleton_application::create(); } -bool TFatturazione_bolle_app::process(TIndwin& iw, TFatturazione_bolle& eld, +bool TFatturazione_bolle_app::process(TIndwin& iw, TElaborazione & eld, TLista_documenti& din, const TDate& data_elab) { // Crea documenti di output @@ -378,7 +363,8 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m) const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - TFatturazione_bolle eld(m.get(F_CODICE_ELAB)); + TElaborazione * e = elab(m.get(F_CODICE_ELAB)); + TElaborazione & eld = *e; TToken_string tipidoc(24), statidoc(10); eld.tipi_validi(tipidoc); eld.stati_validi(statidoc); @@ -406,6 +392,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m) break; } } + delete e; } void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m) @@ -429,7 +416,8 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m) const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - TFatturazione_bolle eld(m.get(F_CODICE_ELAB)); + TElaborazione * e = elab(m.get(F_CODICE_ELAB)); + TElaborazione & eld = *e; TToken_string tipidoc(24), statidoc(10); eld.tipi_validi(tipidoc); eld.stati_validi(statidoc); @@ -457,6 +445,8 @@ void TFatturazione_bolle_app::process_by_ragsoc(const TMask& m) break; } } + delete e; + } void TFatturazione_bolle_app::process_by_doc(const TMask& m) @@ -481,7 +471,8 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m) const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); const long an = m.get_long(F_NUMERO_DOCUMENTO_A); - TFatturazione_bolle eld(m.get(F_CODICE_ELAB)); + TElaborazione * e = elab(m.get(F_CODICE_ELAB)); + TElaborazione & eld = *e; TToken_string tipidoc(24), statidoc(10); eld.tipi_validi(tipidoc); eld.stati_validi(statidoc); @@ -530,6 +521,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m) break; } } + delete e; } void TFatturazione_bolle_app::main_loop() diff --git a/ve/ve6200.h b/ve/ve6200.h new file mode 100755 index 000000000..4a4edd4ae --- /dev/null +++ b/ve/ve6200.h @@ -0,0 +1,26 @@ +#ifndef __APPLICATION_H +#include +#endif + +#ifndef __MASK_H +#include +#endif + +#include "velib.h" + +class TFatturazione_bolle_app : public TSkeleton_application +{ + TString4 _default_selection; + +protected: + virtual bool create(); + virtual void main_loop(); + virtual TFatturazione_bolle * elab(const TString & cod) const { return new TFatturazione_bolle(cod);} + + + bool process(TIndwin& iw, TElaborazione & eld, TLista_documenti& din, const TDate& data_elab); + void process_by_cli(const TMask& m); + void process_by_ragsoc(const TMask& m); + void process_by_doc(const TMask& m); +}; + diff --git a/ve/ve6500.cpp b/ve/ve6500.cpp index 75a3437ea..bd049275b 100755 --- a/ve/ve6500.cpp +++ b/ve/ve6500.cpp @@ -308,12 +308,11 @@ void TPenna_app::check_doc() //definizione della me TCheck_mask m; //istanza di TPenna_mask con il nome m (perche'ho chiamato una maschera) if(m.run()==K_ENTER) { - TConfig ini(_ini_name, "Main"); //apre il file su cui scrivere + TConfig ini(_ini_name, "Transaction"); //apre il file su cui scrivere //chiamo il nome del file F_FILE che abbiamo scelto con la maschera; get //legge una stringa TRecord_cache c(LF_CODCORR, 2); - ini.set("Result", "SUCCESS"); //comunica al chiamante il successo della transazione const TFilename nomefile = m.get(F_FILE); //assegno alla variabile nomefile la stringa letta con m.get(F_FILE); //nomefile é una variabile di tipo TFilename @@ -371,6 +370,7 @@ void TPenna_app::check_doc() //definizione della me { bool found = false; TString codice = articolocor.get(fcod); + TString codicecorr; const real qta(articolocor.get(fqta)); TString16 mag; @@ -378,7 +378,7 @@ void TPenna_app::check_doc() //definizione della me const TRectype & codcorr = c.get(codice); if (!codcorr.empty()) - codice = codcorr.get("CODART"); + codicecorr = codcorr.get("CODART"); if (fmag >= 0) mag = articolocor.get(fmag); @@ -387,7 +387,7 @@ void TPenna_app::check_doc() //definizione della me TRiga_documento & row = d[r]; const TString & rowcod = row.get(RDOC_CODART); - if (codice == rowcod) + if ((codice == rowcod) ||(codicecorr == rowcod)) { if (mag.blank() || mag == row.get(RDOC_CODMAG)) { @@ -404,16 +404,30 @@ void TPenna_app::check_doc() //definizione della me row.put(RDOC_CODART, codice); row.put(RDOC_CODARTMAG, codice); row.put(RDOC_CODMAG, mag); + row.put(RDOC_DESCR, cache().get(LF_ANAMAG, codice, ANAMAG_DESCR)); row.put(RDOC_QTAGG1, qta); } } } articoli.close(); + const int rows = d.physical_rows(); + bool doc_different = false; + + for (int r = rows; !doc_different && r > 0; r--) + { + TRiga_documento & row = d[r]; + const real qta1 = row.get_real(RDOC_QTAGG1); + + doc_different = row.get_real(RDOC_QTA) != qta1; + } TReport rep; TReport_book book; + ini.set("Result", "SUCCESS", "Transaction"); //comunica al chiamante il successo della transazione + if (doc_different) + { if (rep.load("ve6500a")) { const TString query(rep.recordset()->query_text()); @@ -422,10 +436,47 @@ void TPenna_app::check_doc() //definizione della me book.add(rep); if (book.pages() > 0) book.print_or_preview(); - xvt_fsys_removefile(nomefile); + for (int r = rows; r > 0; r--) + { + TRiga_documento & row = d[r]; + const real qta1 = row.get_real(RDOC_QTAGG1); + + if (qta1 == ZERO) + d.destroy_row(r, true); + else + { + if (row.get_real(RDOC_QTA) != qta1) + row.put(RDOC_QTA, qta1); + row.zero(RDOC_QTAGG1); + } + } + if (yesno_box("Si desidera aggiornare il documento\ncon la lettura da terminale")) + { + const int rows = d.rows(); + const int items = TRectype(LF_RIGHEDOC).items(); + for (int r = 1; r <= rows; r++) + { + const TRiga_documento & row = d[r]; + para.format("%d,%d", LF_RIGHEDOC, r); // scrive i due numeri (%d) separati dalla , con format (che formatta + // la stringa para con il formato specificato tra " ") + ini.set_paragraph(para); // sposta il cursore sulla nuova para (nuovo valore) + + for (int f = 0; f < items; f++) + { + const char * name = row.fieldname(f); + const TString & val = row.get(name); + + ini.set(name, val); // scrive il codice sul file ini + } + } + } + else + ini.set("Result", "ERROR", "Transaction"); //comunica al chiamante l'insuccesso della transazione } else error_box("Non posso leggere il report ve6500.rep"); + } + xvt_fsys_removefile(nomefile); } } @@ -435,7 +486,7 @@ void TPenna_app::load_doc() //definizione della me TPenna_mask m; //istanza di TPenna_mask con il nome m (perche'ho chiamato una maschera) if(m.run()==K_ENTER) { - TConfig ini(_ini_name, "Main"); //apre il file su cui scrivere + TConfig ini(_ini_name, "Transaction"); //apre il file su cui scrivere //chiamo il nome del file F_FILE che abbiamo scelto con la maschera; get //legge una stringa ini.set("Result", "SUCCESS"); //comunica al chiamante il successo della transazione @@ -462,7 +513,7 @@ void TPenna_app::load_doc() //definizione della me TEsercizi_contabili esc; //crea un oggetto esc di tipo TEsercizi_contabili TString16 annoes; annoes.format("%04d", esc.date2esc(datadoc)); //crea un intero lungo 4 riempito di 0 all'inizio - TString16 codmag = m.get(F_MAG); // setta codmag in base al valore della maschera + TString8 codmag = m.get(F_MAG); // setta codmag in base al valore della maschera codmag.left_just(3) << m.get(F_DEP); // attacca a codmag il F_DEP, codice deposito dalla maschera diff --git a/ve/vearea.men b/ve/vearea.men index 9d63f7f7b..2af3e4c84 100755 --- a/ve/vearea.men +++ b/ve/vearea.men @@ -15,6 +15,7 @@ Item_09 = "Configurazione", [ACQVEN_020] Item_10 = "Importazione documenti STORE", Item_11 = "Trasferimento PACK", Item_12 = "Vendita al dettaglio", , "E" +Item_13 = "Gestione cooperative", , "E" [ACQVEN_001] Caption = "Archivi e tabelle di base" diff --git a/ve/velib.h b/ve/velib.h index 4397d2bd7..a8c0fdd12 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -222,6 +222,7 @@ class TTipo_documento : public TRectype // velib03 TString16 _totale_cont; TString16 _field_prezzo; TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa + TString16 _raee_cod, _raee_fld; TString _str_desc_doc, _str_desc_rdoc; char _tipocf; @@ -264,6 +265,8 @@ public: bool check_giac() const { return _check_qta == 'G'; } bool check_disp() const { return _check_qta == 'D'; } bool load_cont() const { return _load_cont; } + const TString& raee_cod() const { return _raee_cod; } + const TString& raee_fld() const { return _raee_fld; } const TString & descrizione() const { return get("S0"); } const TString & riferimento(const TDocumento& doc, TString& rif) const; @@ -651,7 +654,8 @@ protected: void init(); void check_modules(); virtual void set_variables(TExpression * e) const ; - int set_row_ids(); + void update_raee(); + int set_row_ids(); public: long renum_ndoc(long numdoc = 0); @@ -847,6 +851,7 @@ public: static bool universal_handler( TMask_field& f, KEY key); static bool occas_handler( TMask_field& f, KEY key ); static bool occas_code_handler( TMask_field& f, KEY key ); + static bool occas_cfpi_handler( TMask_field& f, KEY key ); static bool clifo_handler( TMask_field& f, KEY key ); static bool print_handler( TMask_field& f, KEY key ); static bool elabora_handler( TMask_field& f, KEY key ); diff --git a/ve/velib03.cpp b/ve/velib03.cpp index 032bc3885..ee02a366b 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -270,7 +270,7 @@ real TDocumento::spese_incasso(real & imp, int ndec, TTipo_importo t) const { if (ndec == AUTO_DECIMALS) ndec = decimals(); - if (spese_inc.objptr(_rim_dir) == NULL) + if (spese_inc.objptr(_rim_dir) == NULL) // Inizializzo le spese d'incasso se necessario { TConfig conf(CONFIG_STUDIO, "ve"); for (TTipo_pag p = _rim_dir; p < _nessun_pag; p = TTipo_pag((int)p + 1)) @@ -755,7 +755,7 @@ void TDocumento::set_riga_sconto() { if (_sconto == NULL) { - static TString16 _tipo_riga_sc; + static TString4 _tipo_riga_sc; if (_tipo_riga_sc.empty()) { TConfig conf(CONFIG_STUDIO, "ve"); @@ -765,13 +765,13 @@ void TDocumento::set_riga_sconto() { _tipo_riga_sc = "08"; conf.set("TRSCONTI", _tipo_riga_sc); - warning_box("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s", (const char*) _tipo_riga_sc); + warning_box(FR("Il tipo riga sconti di testa non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s"), (const char*) _tipo_riga_sc); } } _sconto = new TRiga_documento(this, _tipo_riga_sc); - _sconto->put("DESCR","Sconto"); + _sconto->put(RDOC_DESCR, TR("Sconto")); } - _sconto->put("SCONTO", sconto); + _sconto->put(RDOC_SCONTO, sconto); } } @@ -881,11 +881,12 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const { if (tipo().spese_aut() && !get_bool(DOC_SPESEUPD)) { + char name[8] = "CODSP0"; TString_array spese; const TRectype & ven_rec = clifor().vendite(); for (int i = 1; i <= 4; i++) { - TString8 name; name.format("CODSP%d", i); + name[5] = '0' + i; const TString& s = ven_rec.get(name); if (s.full()) spese.add(s); @@ -893,6 +894,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const myself.update_spese_aut(spese); } myself.update_conai(); + myself.update_raee(); myself.set_row_ids(); const bool check_movmag = dongle().active(MGAUT) && tipo().mov_mag(); @@ -2186,6 +2188,14 @@ void TDocumento::put_str(const char* fieldname, const char* val) dirty_fields(); } else + if (strcmp(fieldname, DOC_CODCF) == 0) + { + const TString16 v(val); + put("SPESEUPD", TRectype::get(DOC_CODCF) == v); + TAuto_variable_rectype::put_str(fieldname, v); + dirty_fields(); + } + else { TAuto_variable_rectype::put_str(fieldname, val); dirty_fields(); @@ -2204,9 +2214,9 @@ const TString& TDocumento::get_str(const char* fieldname) const void TDocumento::zero(const char * fieldname) { - if (strcmp(fieldname, "TIPODOC") == 0) + if (strcmp(fieldname, DOC_TIPODOC) == 0) reset_fields(*this); - TRectype::zero(fieldname); + TAuto_variable_rectype::zero(fieldname); dirty_fields(); } @@ -2315,6 +2325,96 @@ TRecord_array& TDocumento::body(int logicnum) const return r; } +void TDocumento::update_raee() +{ + const TString & r_cod = tipo().raee_cod(); + const TString & r_fld = tipo().raee_fld(); + + if (r_cod.full() && r_fld.full()) + { + TSpesa_prest sp(r_cod); + TString4 cod_iva_cli; + TLocalisamfile cfven(LF_CFVEN); + cfven.put("TIPOCF", get("TIPOCF")); + cfven.put("CODCF", get("CODCF")); + if (cfven.read() == NOERR) + cod_iva_cli = cfven.get("ASSFIS"); + int nrows = physical_rows(); + int i; + TArticolo art; + + for (i = nrows; i > 0; i--) + { + TRiga_documento & r = row(i); + + if (r.tipo().tipo() == RIGA_SPESEDOC && r.is_generata() && r.get("GENTIPO") == "R") + destroy_row(i, true); + } + nrows = physical_rows(); + for (i = nrows; i > 0; i--) + { + TRiga_documento & r = row(i); + + if (r.is_articolo()) + { + const TString & codart = r.get(RDOC_CODARTMAG); + + art.read(codart); + real tax = art.get_real(r_fld); + + if (tax != ZERO) + { + const TCurrency_documento val(tax, *this, true); + TString16 t(sp.tipo_riga()); + TRiga_documento & r1 = insert_row(i + 1, t); + + copy_data(r1, r); + r1.set_tipo(t); + r1.put(RDOC_CODART, r_cod); + TString d(sp.descrizione()); + + if (d.full()) + d << " - "; + d << r1.get(RDOC_DESCR); + d << r1.get(RDOC_DESCEST); + r1.put(RDOC_DESCR, d.left(50)); + if (d.len() > 50) + { + r1.put(RDOC_DESCLUNGA, "X"); + r1.put(RDOC_DESCEST, d.mid(50)); + } + else + { + r1.zero(RDOC_DESCLUNGA); + r1.zero(RDOC_DESCEST); + } + const TString & um = sp.um(); + + if (um.full()) + r1.put(RDOC_UMQTA, um); + if (cod_iva_cli.blank()) + { + const TString & codiva = sp.cod_iva(); + if (codiva.full()) + r1.put(RDOC_CODIVA, codiva); + } + else + r1.put(RDOC_CODIVA, cod_iva_cli); + tax = val.get_num(); + r1.put(RDOC_PREZZO, tax); + if (tipo().calcolo_lordo()) + { + tax = r1.iva().lordo(tax, ALL_DECIMALS); + r1.put(RDOC_PREZZOL, tax); + } + r1.generata(); + r1.put("GENTIPO", "R"); + } + } + } + } +} + void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field * sh) { const bool updated = get_bool("SPESEUPD"); @@ -2366,6 +2466,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, riga.put(RDOC_CODART, s); riga.generata(); riga.put(RDOC_DESCR, sp.descrizione()); + if (cod_iva_cli.blank()) + riga.put(RDOC_CODIVA, sp.cod_iva()); + else + riga.put(RDOC_CODIVA, cod_iva_cli); switch (sp.tipo()) { case 'Q': @@ -2385,7 +2489,10 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, sppr_calc(sp, valuta, cambio, prezzo, controeuro); if (this->tipo().calcolo_lordo()) + { prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS); + riga.put(RDOC_PREZZOL, prezzo); + } riga.put(RDOC_PREZZO, prezzo); riga.put(RDOC_UMQTA, sp.um()); } @@ -2653,4 +2760,4 @@ int TDocumento::tipo_riclassificato() const tipo_riclassificato = TTipo_documento::_fattura; } return tipo_riclassificato; -} \ No newline at end of file +} diff --git a/ve/velib03a.cpp b/ve/velib03a.cpp index 00be9e594..2460a6017 100755 --- a/ve/velib03a.cpp +++ b/ve/velib03a.cpp @@ -266,7 +266,7 @@ void TTipo_documento::add_formula_if_needed(TConfig& profile, TString& variable, const char* varname, const char* formula) { variable = profile.get(varname, "MAIN"); - if (variable.empty()) + if (variable.blank()) variable = varname; const TRectype& trr = cache().get("%FRD", variable); if (trr.empty() || trr.get("S1").empty()) @@ -336,6 +336,8 @@ void TTipo_documento::read_formule() _field_qtaevasa = prof.get(RDOC_QTAEVASA, NULL, -1, RDOC_QTAEVASA); _check_qta = prof.get_char("CHECK_QTA", "MAIN"); _load_cont = prof.get_bool("LOAD_CONT", "MAIN"); + _raee_cod = prof.get("RAEE_COD", "MAIN"); + _raee_fld = prof.get("RAEE_FLD", "MAIN"); _str_desc_doc = prof.get("DESCRIZIONE_DOC"); _str_desc_rdoc = prof.get("DESCRIZIONE_RDOC"); @@ -397,6 +399,23 @@ bool TTipo_documento::scarica_residuo() const return get_bool("B4"); } +const TString& TTipo_documento::main_print_profile() const +{ + TString& tmp = get_tmp_string(); + tmp = get("S5"); + tmp.cut(8); tmp.rtrim(); + return tmp; +} + +const TString& TTipo_documento::additional_print_profile() const +{ + TString& tmp = get_tmp_string(); + tmp = get("S5"); + tmp.ltrim(8); tmp.rtrim(); + return tmp; +} + + /////////////////////////////////////////////////////////// // Espressione documento @@ -458,6 +477,8 @@ int TExpr_documento::parse_user_func(const char * name, int nparms) const return nparms == 2 ? _componente : -1; if (strcmp(name, "COMPQTA") == 0) return nparms == 2 ? _comp_qta : -1; + if (strcmp(name, "NRATE") == 0) + return nparms == 0 ? _nrate : -1; return -1; } @@ -885,6 +906,13 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st } } break; + case _nrate: + { + const TPagamento & p = _doc->pagamento(); + const real r = p.n_rate(); + stack.push(r); + } + break; default: TExpression::evaluate_user_func(index, nparms, stack, type); break; @@ -949,7 +977,7 @@ int TFormula_documento::read(const char* codice, const char * expr, bool numexpr if (err == NOERR) { const TTypeexp et = expr_type(); - const TString e = expr_string(); // Copio espressione proveniente da record + const TString& e = expr_string(); // Copio espressione proveniente da record _expr = new TExpr_documento(e, et); } else diff --git a/ve/velib04.cpp b/ve/velib04.cpp index 666146c56..7bdb510f4 100755 --- a/ve/velib04.cpp +++ b/ve/velib04.cpp @@ -281,7 +281,7 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti& TExternal_app app(command_line); if (app.run() == 0) { - TConfig c(name, "Main"); + TConfig c(name, "Transaction"); const TString & res = c.get("Result"); if (res == "SUCCESS") { @@ -316,6 +316,7 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti& r++; par.format("%d,%d", LF_RIGHEDOC, r); } + d.stato(stato_finale_doc_iniziale()[0]); return true; } else diff --git a/ve/velib04.h b/ve/velib04.h index 807d4fdc9..17701c29f 100755 --- a/ve/velib04.h +++ b/ve/velib04.h @@ -80,6 +80,9 @@ public: const TString& descrizione() const { return get("S0"); } const TTipo_elaborazione tipo() const { return (TTipo_elaborazione) get_int("I0"); } + virtual void tipi_validi(TToken_string& tipi) const {} + virtual void stati_validi(TToken_string& stati) const {} + bool doc_uguale(int u) const { return get("S1").mid(u, 1) == "X"; } bool riga_uguale(int u) const { return get("S1").mid(40+u, 1) == "X"; } @@ -97,6 +100,7 @@ public: bool usa_data_consegna() const { return get_bool("B9"); } bool kill_descrizione_estesa() const { return get_bool("B10"); } bool calcola_scarti() const { return get_bool("B11"); } + const TString & num_riferimenti_in() const { return get("S11"); } int intestazioni_sheet() const { return get_int("I1"); } @@ -139,6 +143,8 @@ protected: bool aggiorna_ncolli_tara_pnetto(TRiga_documento& r) const; public: + bool nettifica() { return get_bool("B12"); } + bool reload_prices() { return get_bool("B13"); } virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); @@ -151,13 +157,24 @@ class TFatturazione_bolle : public TElaborazione // velib04a { TToken_string _cod_desc; +protected: + virtual void campi_raggruppamento_righe(TToken_string& campi_riga) const; + virtual void campi_raggruppamento(TToken_string& campi) const; + virtual bool doc_raggruppabile(const TDocumento & doc) const { return doc.raggruppabile(); } + virtual bool doc_raggruppabile(const TDocumento & doc_in, const TDocumento & doc_out, TToken_string & campi) const + { return doc_in.raggruppabile(doc_out, campi); } + + virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; } + virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); + virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); } + public: virtual bool raggruppa(TDocumento& din, TDocumento& dout); virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); - void tipi_validi(TToken_string& tipi) const; - void stati_validi(TToken_string& stati) const; + virtual void tipi_validi(TToken_string& tipi) const; + virtual void stati_validi(TToken_string& stati) const; TFatturazione_bolle(const char* cod); TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { } diff --git a/ve/velib04a.cpp b/ve/velib04a.cpp index fdd054796..cbafb9a6e 100755 --- a/ve/velib04a.cpp +++ b/ve/velib04a.cpp @@ -37,6 +37,74 @@ void TFatturazione_bolle::stati_validi(TToken_string& stati) const CHECK(!stati.empty_items(), "Nessuno stato documento valido"); } +void TFatturazione_bolle::campi_raggruppamento_righe(TToken_string& campi_riga) const +{ + const bool ragg_rig = raggruppa_righe(); + + if (ragg_rig) + { + campi_riga = "CODART|UMQTA"; // Uguali sempre + // Uguali se commesse attive + if (dongle().active(CAAUT) || dongle().active(CMAUT)) + { + campi_riga.add(RDOC_CODCMS); + campi_riga.add(RDOC_FASCMS); + campi_riga.add(RDOC_CODCOSTO); + } + // Uguali opzionalmente + if (riga_uguale(0)) campi_riga.add("CODMAG"); + if (riga_uguale(1)) campi_riga.add("CODIVA"); + if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO"); + + } +} + +void TFatturazione_bolle::campi_raggruppamento(TToken_string& campi) const +{ + campi = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre + + // Uguali opzionalmente + const char* cond[] = { "CAMBIO", "SCONTO", "TIPODOC", "CODNUM", + "CODPAG", "CODABIA|CODCABA", "CODLIST", "CODAG", + "CODSPMEZZO", "CODPORTO", "CAUSTRASP", "CODVETT1|CODVETT2|CODVETT3", + "CODINDSP", + NULL }; + + for (int u = 0; cond[u]; u++) + if (doc_uguale(u)) campi.add(cond[u]); +} + +void TFatturazione_bolle::create_row(TDocumento& doc_out, const TRiga_documento & rin) +{ + TRiga_documento& rout = doc_out.new_row(); // ... crea una riga nuova e + + doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente. + rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale + + if (usa_data_consegna()) + { + rout.zero(RDOC_QTAEVASA); + rout.zero(RDOC_RIGAEVASA); + } + + if (kill_descrizione_estesa()) // Cancello eventualmente la descrizione estesa + { + rout.zero(RDOC_DESCLUNGA); + rout.zero(RDOC_DESCEST); + } + + if (prezzo_da_ordine()) // Se devo copiare il prezzo originale all'ordine + { + const TRectype* row_ord = rin.find_original_rdoc(); + if (row_ord != NULL) + { + const real ord_price = row_ord->get_real(RDOC_PREZZO); + const TString& ord_scont = row_ord->get(RDOC_SCONTO); + rout.put(RDOC_PREZZO, ord_price); + rout.put(RDOC_SCONTO, ord_scont); + } + } +} bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) { @@ -131,30 +199,10 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) const bool ignora_desc = ignora_descrizioni(); TToken_string campi_riga(80); - const bool ragg_rig = raggruppa_righe(); - if (ragg_rig) - { - // Uguali sempre - campi_riga.add(RDOC_CODART); - campi_riga.add(RDOC_UMQTA); - // Uguali se commesse attive - if (dongle().active(CAAUT) || dongle().active(CMAUT)) - { - campi_riga.add(RDOC_CODCMS); - campi_riga.add(RDOC_FASCMS); - campi_riga.add(RDOC_CODCOSTO); - } - // Uguali opzionalmente - if (riga_uguale(0)) - campi_riga.add(RDOC_CODMAG); - if (riga_uguale(1)) - campi_riga.add(RDOC_CODIVA); - if (riga_uguale(2)) - { - campi_riga.add(RDOC_PREZZO); - campi_riga.add(RDOC_SCONTO); - } - } + + campi_raggruppamento_righe(campi_riga); + + const bool ragg_rig = campi_riga.full(); for (int r = 1; r <= doc_in.physical_rows(); r++) { @@ -192,43 +240,15 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ... { - rout += rin; // ... sommaci la quantita' ecc. + add_rows(rout, rin); elaborata = true; // Ricorda di averla gia' elaborata break; } } } if (!elaborata) // Se la riga non e' stata gia' sommata ... - { - TRiga_documento& rout = doc_out.new_row(); // ... crea una riga nuova e + create_row(doc_out, rin); - doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente. - rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale - - if (usa_dcons) - { - rout.zero(RDOC_QTAEVASA); - rout.zero(RDOC_RIGAEVASA); - } - - if (kill_descrizione_estesa()) // Cancello eventualmente la descrizione estesa - { - rout.zero(RDOC_DESCLUNGA); - rout.zero(RDOC_DESCEST); - } - - if (prezzo_da_ordine()) // Se devo copiare il prezzo originale all'ordine - { - const TRectype* row_ord = rin.find_original_rdoc(); - if (row_ord != NULL) - { - const real ord_price = row_ord->get_real(RDOC_PREZZO); - const TString& ord_scont = row_ord->get(RDOC_SCONTO); - rout.put(RDOC_PREZZO, ord_price); - rout.put(RDOC_SCONTO, ord_scont); - } - } - } } //cambio stato documento @@ -266,18 +286,10 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do { TWait_cursor hourglass; TToken_string campi_doc(128); // Lista di campi che devono essere uguali - campi_doc = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre - - // Uguali opzionalmente - const char* cond[] = { "CAMBIO", "SCONTO", "TIPODOC", "CODNUM", - "CODPAG", "CODABIA|CODCABA", "CODLIST", "CODAG", - "CODSPMEZZO", "CODPORTO", "CAUSTRASP", "CODVETT1|CODVETT2|CODVETT3", - "CODINDSP", - NULL }; - for (int u = 0; cond[u]; u++) - if (doc_uguale(u)) campi_doc.add(cond[u]); - + + campi_raggruppamento( campi_doc); + for (int id = 0; id < doc_in.items(); id++) { TDocumento& campione = doc_in[id]; @@ -296,11 +308,13 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do } else { - if (campione.raggruppabile()) // Se il documento ha il flag di raggruppabilita' ... + if (doc_raggruppabile(campione)) // Se il documento ha il flag di raggruppabilita' ... +// if (campione.raggruppabile()) // Se il documento ha il flag di raggruppabilita' ... { for (od = 0; od < tot; od++) // ... cerca un documento compatibile. { - if (campione.raggruppabile(doc_out[od], campi_doc)) + if (doc_raggruppabile(campione, doc_out[od], campi_doc)) +// if (campione.raggruppabile(doc_out[od], campi_doc)) break; } } @@ -335,7 +349,6 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do const int tot = doc_out.items(); const TString4 codnum(codice_numerazione_finale()); - const TString4 tipo_out(get("S8")); // Tipo del documento di output for (int i = 0; i < tot; i++) // Forza tipo e numerazione documento. { @@ -346,6 +359,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do const TRectype & cfven = cache().get(LF_CFVEN, key); const TString4 tipo_cli(cfven.get(CFV_TIPODOCFAT)); + const TString & tipo_out = get_tipo_out(d); // Tipo del documento di output TRecfield td(d, DOC_TIPODOC); // Uso il TRecfield per scavalcare tutti gli automatismi td = tipo_cli.empty() ? tipo_out : tipo_cli; const TString& sconto = d.get(DOC_SCONTOPERC); diff --git a/ve/velib04d.cpp b/ve/velib04d.cpp index 1074d9669..66c5bd3c8 100755 --- a/ve/velib04d.cpp +++ b/ve/velib04d.cpp @@ -2,6 +2,9 @@ #include "velib04d.h" #include +#include +#include +#include /////////////////////////////////////////////////////////// // TConsegna ordini mask @@ -178,7 +181,7 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo) if (rec.is_descrizione()) show_line = !_ignora_descrizioni; - if ( show_line && (articolo.empty() || articolo == rec.get(RDOC_CODART))) + if ( show_line && (articolo.blank() || articolo == rec.get(RDOC_CODART))) { TToken_string& r = s.row(-1); r = " "; @@ -209,6 +212,8 @@ void TConsegna_mask::doc2mask(const TDocumento& doc, const TString & articolo) r.add(rec.get(RDOC_DESCR), s.cid2index(S_DESCR)); r.add(rec.get(RDOC_TIPORIGA), s.cid2index(S_TIPORIGA)); r.add(rec.get(RDOC_NRIGA),s.cid2index(S_NUMRIGA)); + r.add(rec.get(RDOC_CODAGG1),s.cid2index(S_CODAGG1)); + r.add(rec.get(RDOC_CODAGG2),s.cid2index(S_CODAGG2)); } } if (_ordina_per_codice) @@ -245,6 +250,28 @@ TConsegna_mask::TConsegna_mask(int header_code, bool per_codice, bool ignora_des s.set_column_header(S_QTADAEVADERE, h); s.sheet_mask().field(S_QTADAEVADERE).set_prompt("Da evadere "); } + + TConfig c(CONFIG_DITTA, "ve"); + + if (c.exist("CODAGG1")) + { + TString80 codagg1 = c.get("CODAGG1"); + TMask_field & agg1 =s.sheet_mask().field(S_CODAGG1); + + s.set_column_header(S_CODAGG1, codagg1); + codagg1.rpad(strlen(agg1.prompt())); + agg1.set_prompt(codagg1); + } + + if (c.exist("CODAGG2")) + { + TString80 codagg2 = c.get("CODAGG2"); + TMask_field & agg2 =s.sheet_mask().field(S_CODAGG2); + + s.set_column_header(S_CODAGG2, codagg2); + codagg2.rpad(strlen(agg2.prompt())); + agg2.set_prompt(codagg2); + } } /////////////////////////////////////////////////////////// @@ -330,15 +357,28 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o } TRiga_documento& rout = outdoc[riga_rif]; + TString memo(1024); + + memo = rout.get(RDOC_DESCR); + if (rout.get_bool(RDOC_DESCLUNGA)) + memo << rout.get(RDOC_DESCEST); // Costruisce la stringa di riferimento TString riferimento; indoc.riferimento(riferimento); if (riferimento.empty()) riferimento = indoc.tipo().descrizione(); - if (usa_doc_rif() && indoc.get(DOC_NUMDOCRIF).not_empty()) + TString80 nrif = indoc.get(DOC_NUMDOCRIF); + + if (nrif.blank()) + nrif = indoc.get(DOC_DOC1); + if (nrif.blank()) + nrif = indoc.get(DOC_DOC2); + if (nrif.blank()) + nrif = indoc.get(DOC_DOC3); + if (usa_doc_rif() && nrif.full()) { - riferimento << " n. " << indoc.get(DOC_NUMDOCRIF); + riferimento << " n. " << nrif; riferimento << " del " << indoc.get(DOC_DATADOCRIF); } else @@ -346,30 +386,87 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o riferimento << " n. " << indoc.numero(); riferimento << " del " << indoc.data().string(); } + if (memo.full()) + memo << '\n'; + memo << riferimento; + const TString4 numrif = num_riferimenti_in(); - // Setta la descrizione se vuota - if (rout.get(RDOC_DESCR).empty()) - rout.put(RDOC_DESCR, riferimento); - else + if (numrif.full()) { - // Altrimenti aggiungi il riferimento al memo - TString memo(1024); - memo = rout.get(RDOC_DESCEST); - if (memo.empty()) + riferimento.cut(0); + TSheet_field& s = m.sfield(F_ROWS); + TAssoc_array doc_rows; + + FOR_EACH_SHEET_ROW(s, n, row) { - TString80 rif(rout.get(RDOC_DESCR)); + const int r = row->get_int(s.cid2index(S_NUMRIGA)); + if (row->get_char(0) > ' ') // E' da consegnare? + { + const TRiga_documento& rin = indoc[r]; + TString query("USE RDOC KEY 4"); + TString select; + const char provv = rin.get_char(RDOC_PROVV); + const int anno = rin.get_int(RDOC_ANNO); + const TString4 codnum = rin.get(RDOC_CODNUM); + const long ndoc = rin.get_long(RDOC_NDOC); + const int idriga = rin.get_int(RDOC_IDRIGA); + + query << "\nSELECT CODNUM=\"" << numrif << '\"'; + select.format("DAPROVV=\"%c\" DAANNO=%d DACODNUM=\"%s\" DANDOC=%ld DAIDRIGA=%d", provv, anno, (const char *) codnum, ndoc, idriga); + query << "\nFROM " << select; + query << "\nTO " << select; + + TISAM_recordset recset(query); - rif << '\n'; - rout.put(RDOC_DESCR, rif); - rout.put(RDOC_DESCLUNGA, "X"); + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + const char provv = recset.get(RDOC_PROVV).as_string()[0]; + const int anno = recset.get(RDOC_ANNO).as_int(); + const TString4 codnum = recset.get(RDOC_CODNUM).as_string(); + const long ndoc = recset.get(RDOC_NDOC).as_int(); + TString doc_key; doc_key.format("%c|%d|%s|%ld", provv, anno, (const char *) codnum, ndoc); + if (!doc_rows.is_key(doc_key)) + { + const TDocumento d(provv, anno, codnum, ndoc); + TString rif; + + if (!d.empty()) + { + d.riferimento(rif); + TString80 nrifin = d.get(DOC_NUMDOCRIF); + + if (nrifin.blank()) + nrifin = d.get(DOC_DOC1); + if (nrifin.blank()) + nrifin = d.get(DOC_DOC2); + if (nrifin.blank()) + nrifin = d.get(DOC_DOC3); + + if (usa_doc_rif() && nrifin.full()) + { + rif << " n. " << nrifin; + rif << " del " << d.get(DOC_DATADOCRIF); } else - memo << '\n'; - memo << riferimento; - rout.put(RDOC_DESCEST, memo); + { + rif << " n. " << d.numero(); + rif << " del " << d.data().string(); + } + riferimento << rif << '\n'; + } + doc_rows.add(doc_key); + } + } + } } + memo.insert(riferimento); } + rout.put(RDOC_DESCLUNGA, memo.len() > 50); + rout.put(RDOC_DESCR, memo.left(50)); + rout.put(RDOC_DESCEST, memo.mid(50)); + } + TToken_string campi_riga(80); const bool ragg_rig = raggruppa_righe(); @@ -390,8 +487,8 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o TSheet_field& s = m.sfield(F_ROWS); FOR_EACH_SHEET_ROW(s, n, row) { - const int r = row->get_int(S_NUMRIGA - FIRST_FIELD); - if (*row->get(0) > ' ') // E' da consegnare? + const int r = row->get_int(s.cid2index(S_NUMRIGA)); + if (row->get_char(0) > ' ') // E' da consegnare? { TRiga_documento& inrec = indoc[r]; const real daeva = row->get(S_QTADAEVADERE - FIRST_FIELD); @@ -493,6 +590,8 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o outrec.zero(qtaevasa_field); // Azzera quantita' evasa erroneamente copiata dall'ordine outrec.zero(RDOC_RIGAEVASA); // Azzera flag di evasa erroneamente copiata dall'ordine outrec.set_original_rdoc_key(inrec); + if (reload_prices()) + outrec.zero(RDOC_CHECKED); } } } @@ -523,7 +622,42 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o } } - if (indoc.is_evaso()) + if (reload_prices()) + { + TDocumento_mask * m = new TDocumento_mask(outdoc.get(DOC_TIPODOC)); + + m->doc() = outdoc; + m->doc2mask(); + m->mask2doc(); + outdoc = m->doc(); + delete m; + + + } + + if (nettifica()) + { + int i; + + for (i = indoc.physical_rows(); i >= 1; i--) + { + TRiga_documento& inrec = indoc[i]; + const int nrow = inrec.get_int(RDOC_NRIGA); + + if (inrec.is_evasa()) + indoc.destroy_row(i, true); + else + { + const real evaso = inrec.qtaevasa(); + const char* fq = inrec.field_qta(); + const char* fqe = inrec.field_qtaevasa(); + + inrec.add(fq, -evaso); // nuovo modo di incrementare + inrec.zero(fqe); + } + } + } + if (indoc.is_evaso()) { indoc.stato(stato_finale_doc_iniziale()[0]); } diff --git a/ve/velib04d.h b/ve/velib04d.h index 0e9501787..3c0f3c432 100755 --- a/ve/velib04d.h +++ b/ve/velib04d.h @@ -14,6 +14,8 @@ #define S_DESCR 114 #define S_TIPORIGA 115 #define S_NUMRIGA 116 +#define S_CODAGG1 117 +#define S_CODAGG2 118 #define F_CODNUM 201 #define F_DESNUM 202 diff --git a/ve/velib04d.uml b/ve/velib04d.uml index bdc7448ae..0e61eaadb 100755 --- a/ve/velib04d.uml +++ b/ve/velib04d.uml @@ -188,13 +188,15 @@ BEGIN ITEM "Descrizione@50" ITEM "Tipo@4" ITEM "N.ro riga" + ITEM "Codice Aggiuntivo 1" + ITEM "Codice Aggiuntivo 2" END ENDPAGE ENDMASK -PAGE "Riga 1" -1 -1 66 13 +PAGE "Riga 1" -1 -1 66 15 GROUPBOX DLG_NULL 64 8 BEGIN @@ -317,6 +319,18 @@ BEGIN PROMPT 41 10 "Riga evasa" END +STRING S_CODAGG1 20 +BEGIN + PROMPT 2 11 "Cod.Aggiuntivo 1 " + FLAGS "D" +END + +STRING S_CODAGG2 20 +BEGIN + PROMPT 2 12 "Cod.Aggiuntivo 2 " + FLAGS "D" +END + BUTTON DLG_OK 10 2 BEGIN PROMPT -12 -1 "" diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 88cf769a5..5762faceb 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -9,8 +9,6 @@ #include "sconti.h" #include "veini.h" -#include "velib.h" -#include "vepriv.h" #include "verig.h" #include "veuml1.h" #include "veini.h" @@ -50,7 +48,7 @@ bool numdocrif_hndl( TMask_field& field, KEY key ) TRelation rel(LF_DOC); TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo; TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec); - TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); + TString16 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); cur.setfilter(f); @@ -294,8 +292,15 @@ bool data_hndl( TMask_field& field, KEY key ) if (key == K_ENTER || field.to_check(key)) { const TDate datadoc(m.get(F_DATADOC)); - if (!datadoc.ok()) - return field.error_box("La data documento deve essere comunque indicata."); + const int annodoc = m.get_int(F_ANNO); + if (datadoc.year() != annodoc) + { + if (datadoc.ok()) + return field.error_box(TR("La data documento deve appartenere all'anno %d"), annodoc); + else + return field.error_box(TR("La data documento deve essere comunque indicata")); + } + const TCodice_numerazione codnum(m.get(F_CODNUM)); if (codnum.test_eser()) { @@ -333,12 +338,17 @@ bool data_hndl( TMask_field& field, KEY key ) doc.read(_isgteq); if (doc.eof() || doc.prev() == NOERR) { - TDate dataprev = doc.get_date(DOC_DATADOC); - + const TDate dataprev = doc.get_date(DOC_DATADOC); same_key = doc.curr().same_key(m.doc().head(), 1, 1); if (same_key && datadoc < dataprev) return field.error_box("Data documento inferiore alla data del documento precedente"); } + + doc.curr() = m.doc().head(); + doc.read(_isgreat); + same_key = doc.curr().same_key(m.doc().head(), 1, 1); + if (doc.good() && same_key && datadoc > doc.get_date(DOC_DATADOC)) + return field.error_box("Data documento superiore alla data del documento successivo"); } return true; } @@ -358,6 +368,11 @@ void row_set_handler( TMask& m, const int field, const int index ) case 3: if (field == FR_CODART) m.set_handler( field, search_price_handler ); + case 4: + if (field == FR_CODART) + m.set_handler( field, find_price_handler ); + break; + default: break; default: yesnofatal_box( false, "Funzione di handler sulla riga non definita( %d ).", index ); @@ -367,13 +382,13 @@ void row_set_handler( TMask& m, const int field, const int index ) } HIDDEN TString16 curr_um; -HIDDEN real curr_fc(1.0); +HIDDEN real curr_fc = UNO; bool iva_handler( TMask_field& f, KEY key ) { TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask(); - if (key == 0 || (key == K_ENTER && f.get().empty())) + if (key == 0 || (key == K_ENTER && f.empty())) { const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS); if (codiva.not_empty()) @@ -2007,17 +2022,18 @@ bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key) TRelation rel(LF_DOC); rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); - TString80 f; f.format("(CODNUM==\"%s\") && (PROVV==\"%s\") && (ANNO==\"%s\")", - (const char *)m.get(F_CODNUM), (const char *)m.get(F_PROVV), (const char *)m.get(F_ANNO)); - - cur.setfilter(f); - TCursor_sheet sheet(&cur, "CODCF|20->RAGSOC|ANNO|CODNUM|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|CODVAL|G1:TOTDOC", + TString80 filter; + filter.format("(CODNUM==\"%s\") && (PROVV==\"D\") && (ANNO==\"%d\")", + (const char *)m.get(F_CODNUM), m.get_int(F_ANNO)); + cur.setfilter(filter); + TToken_string siblings; + TBrowse_sheet sheet(&cur, "CODCF|20->RAGSOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|G1:TOTDOC|CODVAL", "Documento di riferimento", - "Codice|Ragione Sociale@50|Anno|Numeraz|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", - 0, 1); + "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", + 0, (TEdit_field&)f, siblings); if (sheet.run() == K_ENTER) { - const TString16 ndoc = sheet.row(-1).get(9); + const long ndoc = sheet.row(-1).get_long(7); m.set(F_NDOC, ndoc); m.stop_run(K_AUTO_ENTER); } @@ -2038,16 +2054,16 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key) filtrec.put(DOC_ANNO, m.get(F_ANNO)); TRelation rel(LF_DOC); - rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); TSorted_cursor cur(&rel, "TIPOCF|UPPER(20->RAGSOC)|PROVV|ANNO|CODNUM|PROVV|NDOC", "", 1, &filtrec, &filtrec); - TString80 form; form.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM)); + TString16 filter; filter.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); - cur.setfilter(form, true); + cur.setfilter(filter, true); + TToken_string siblings; + TBrowse_sheet sheet(&cur, "20->RAGSOC|CODCF|NDOC|DATADOC|G1:TOTDOC|CODVAL|20->PAIV", + TR("Ragione Sociale"), + HR("Ragione Sociale@50|Codice|Documento|Data\nDocumento@10|Totale\nDocumento@18V|Valuta|Partita IVA"), + 0, (TEdit_field&)f, siblings); - TCursor_sheet sheet(&cur, "20->RAGSOC|CODCF|20->PAIV|ANNO|CODNUM|NDOC|DATADOC|CODVAL|G1:TOTDOC", - "Ragione Sociale", - "Ragione Sociale@50|Codice|Partita IVA|Anno|Numeraz|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", - 0, 1); TString ragsoc(f.get()); ragsoc.upper(); diff --git a/ve/vepriv.h b/ve/vepriv.h index b9690911d..133e07a82 100755 --- a/ve/vepriv.h +++ b/ve/vepriv.h @@ -3,7 +3,7 @@ enum _formule {_somma, _bolli, _bolli_int, _spinc, _prezzo, _importo, _imponibile, _sconto, _iva, _provv, _qtares, _valdoc, _tipo, _imponibili, _imposte, _totprovv, _pscontot, _ritenuta, - _tipo_ritenuta, _quant, _quantevasa, _componente, _comp_qta }; + _tipo_ritenuta, _quant, _quantevasa, _componente, _comp_qta, _nrate}; enum TTipo_calcolo { _nessun_calcolo, _qtaprezzo, _valore, _percentuale, _scontopi}; void row_set_handler( TMask& m, const int field, const int index ); diff --git a/ve/verig.uml b/ve/verig.uml index eb66d8c9a..863eaca15 100755 --- a/ve/verig.uml +++ b/ve/verig.uml @@ -174,6 +174,9 @@ ENDIF DISPLAY "Codice@20" CODART DISPLAY "Descrizione@50" DESCR OUTPUT FR_CODART CODART +IFDEF(OU_CODART) + OUTPUT OUM_CODART OU_CODART +ENDIF WARNING "Articolo assente" IFDEF(CH_CODART) CHECKTYPE CH_CODART @@ -205,6 +208,9 @@ ENDIF DISPLAY "Descrizione@50" LF_ANAMAG->DESCR DISPLAY "Codice@20" CODART OUTPUT FR_CODART CODART +IFDEF(OU_CODART) + OUTPUT OUM_CODART OU_CODART +ENDIF WARNING "Articolo assente" IFDEF(CH_CODALT) CHECKTYPE CH_CODALT @@ -683,6 +689,9 @@ ENDIF DISPLAY "Descrizione@50" DESCR DISPLAY "Codice@20" CODART OUTPUT FR_DESCRART DESCR +IFDEF(OU_CODART) + OUTPUT OUM_CODART OU_CODART +ENDIF ADD RUN ve2 -3 IFDEF(MS_DESCRART) MESSAGE MS_DESCRART diff --git a/ve/verig01.uml b/ve/verig01.uml index 5236d5d8c..b43d81af1 100755 --- a/ve/verig01.uml +++ b/ve/verig01.uml @@ -16,6 +16,7 @@ DEFINE_FIELD(DESMAG) DEFINE_FIELD(CODDEP) DEFINE_FIELD(DESDEP) DEFINE_FIELD(CODART) +// F_OUT(CODART, FR_CODAGG1, USER1) DEFINE_FIELD(DESCRART) DEFINE_FIELD(UMQTA) DEFINE_FIELD(QTA) diff --git a/ve/verigdef.h b/ve/verigdef.h index 8ebc71c68..a71d06f63 100755 --- a/ve/verigdef.h +++ b/ve/verigdef.h @@ -24,6 +24,8 @@ !!define DI7_##name e7 ;\ !!define DI8_##name e8 ;\ !!define DI9_##name e9 ; +#define F_OUT(name, mfield, field) !!define OUM_##name mfield ; \ + !!define OU_##name field ; \ INCLDEF("verig.h") diff --git a/ve/vesirio1.cpp b/ve/vesirio1.cpp index 1ccf05c5e..f112f7d82 100755 --- a/ve/vesirio1.cpp +++ b/ve/vesirio1.cpp @@ -248,7 +248,7 @@ int TToas400::separa_sconti(const TString& sconto, TToken_string& sconti4) const bool TToas400::genera_righedoc(const TString& path, char t) { //Crea il file vuoto delle righe documenti - const char* tipor = t == 'B' ? "rbolle" : "rfatt"; + const char* tipor = t == 'B' ? "rbolle" : "rfatture"; TFilename trrrig = path; trrrig.add(tipor); trrrig.ext("trr"); TFilename siriorig = path; siriorig.add(tipor); siriorig.ext("dbf"); @@ -379,7 +379,7 @@ void TToas400::copia_documento(TRectype& recdest, const TRectype& recsource, con // tipo -> B=bolle, F=fatture bool TToas400::genera_documenti(const TString& path, char t) { - const char* tipo = t == 'B' ? "bolle" : "fatt"; + const char* tipo = t == 'B' ? "bolle" : "fatture"; //crea il file delle testate delle bolle utilizzando bolle.trr come tracciato record TFilename siriodoc = path; siriodoc.add(tipo); siriodoc.ext("dbf"); diff --git a/ve/vetbeld.h b/ve/vetbeld.h index 4c172f17a..884714f07 100755 --- a/ve/vetbeld.h +++ b/ve/vetbeld.h @@ -40,7 +40,6 @@ #define F_DOC8 158 #define F_DOC9 159 #define F_DOC10 160 -#define F_PROVVISORIO 162 #define F_APPLICAZIONE 163 #define F_INTERATTIVO 164 #define F_INSERT_MODE 165 @@ -50,6 +49,8 @@ #define F_USA_DCONS 170 #define F_KILLDESC 171 #define F_SCARTI 172 +#define F_NETTIFICA 173 +#define F_RELOAD_PRICES 174 #define H_DOC1 180 #define H_DOC2 181 @@ -76,6 +77,8 @@ #define F_RIFERIMENTI_IN_TESTA 321 #define F_IGNORA_DESCRIZIONI 330 #define F_USA_DOCRIF 331 +#define F_RIF_DOCIN 332 +#define F_COMMESSA 333 #define F_PREZZO_DA_ORDINE 340 diff --git a/ve/vetbeld.uml b/ve/vetbeld.uml index 3edb83594..bec415445 100755 --- a/ve/vetbeld.uml +++ b/ve/vetbeld.uml @@ -493,31 +493,45 @@ END BOOLEAN F_KILLDESC BEGIN - PROMPT 45 14 "Non riportare descrizione estesa" + PROMPT 45 13 "Non riportare descrizione estesa" FIELD B10 END BOOLEAN F_ORDINA BEGIN - PROMPT 45 15 "Ordina per codice" + PROMPT 45 14 "Ordina per codice" FIELD B7 GROUP 1 END -BOOLEAN F_SCARTI -BEGIN - PROMPT 45 16 "Calcolo automatico degli scarti" - FIELD B11 - GROUP 1 -END - BOOLEAN F_USA_DCONS BEGIN - PROMPT 45 15 "Usa data di consegna" + PROMPT 45 14 "Usa data di consegna" FIELD B9 GROUP 2 END +BOOLEAN F_SCARTI +BEGIN + PROMPT 45 15 "Calcolo automatico degli scarti" + FIELD B11 + GROUP 1 +END + +BOOLEAN F_NETTIFICA +BEGIN + PROMPT 45 16 "Nettifica le quantità" + FIELD B12 + GROUP 1 +END + +BOOLEAN F_RELOAD_PRICES +BEGIN + PROMPT 45 17 "Ricarica i prezzi" + FIELD B13 + GROUP 1 +END + RADIOBUTTON F_PROTOCOLLO 1 38 BEGIN PROMPT 44 13 "@bProtocollo IVA" @@ -628,6 +642,12 @@ BEGIN FIELD S1[13,13] END +BOOLEAN F_COMMESSA +BEGIN + PROMPT 56 3 "Commessa" + FIELD S1[14,14] +END + GROUPBOX DLG_NULL 78 5 BEGIN PROMPT 1 9 "@bModalita' di raggruppamento delle righe" @@ -666,7 +686,7 @@ BEGIN FIELD B5 END -GROUPBOX DLG_NULL 78 4 +GROUPBOX DLG_NULL 78 5 BEGIN PROMPT 1 14 "@bGestione descrizioni" END @@ -695,9 +715,21 @@ BEGIN FIELD B8 END +STRING F_RIF_DOCIN 4 +BEGIN + PROMPT 2 17 "Numerazione documenti in entrata " + USE %NUM + INPUT CODTAB F_RIF_DOCIN + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_RIF_DOCIN CODTAB + CHECKTYPE NORMAL + FIELD S11 +END + NUMBER F_COLONNE_CO 1 BEGIN - PROMPT 1 18 "Intestazioni consegna ordini " + PROMPT 1 19 "Intestazioni consegna ordini " SHEET "Tipo|Colonna 1@25|Colonna 2@25" ITEM " |Quantita' residua|Quantita' da evadere" ITEM "1|Quantita' consegnata|Quantita' da fatturare" diff --git a/ve/vetbnum.uml b/ve/vetbnum.uml index 652256bf5..ed692562a 100755 --- a/ve/vetbnum.uml +++ b/ve/vetbnum.uml @@ -122,6 +122,11 @@ PAGE "Tipi documento validi" -1 -1 60 14 MESSAGE CLEAR,F_EMRI ITEM "4|Scontrino" MESSAGE ENABLE,F_EMRI + ITEM "5|Conferimento soci" + MESSAGE CLEAR,F_EMRI + ITEM "6|Prestazioni ai soci" + MESSAGE CLEAR,F_EMRI + END STRING F_TIPODOC1 4 diff --git a/ve/vetbprs.h b/ve/vetbprs.h index 397532245..9abaa1e5b 100755 --- a/ve/vetbprs.h +++ b/ve/vetbprs.h @@ -19,7 +19,7 @@ #define PRS_DESCRCONTOA 119 #define PRS_CAMPI 120 #define PRS_QTA 121 - +#define PRS_SEZIONE 122 #define PRS_CDC_V1 131 #define PRS_CDC_A1 151 diff --git a/ve/vetbprs.uml b/ve/vetbprs.uml index 1c1b4c935..d0336d275 100755 --- a/ve/vetbprs.uml +++ b/ve/vetbprs.uml @@ -42,6 +42,13 @@ BEGIN MESSAGE COPY,20@ END +LISTBOX PRS_SEZIONE 6 +BEGIN + PROMPT 2 3 "Sezione per cooperative " + FIELD S11 + ITEM "D|Dare" + ITEM "A|Avere" +END STRING PRS_CODASSFIS 4 BEGIN diff --git a/ve/vetbspp.h b/ve/vetbspp.h index 079ef277e..700257465 100755 --- a/ve/vetbspp.h +++ b/ve/vetbspp.h @@ -24,6 +24,7 @@ #define SPP_TIPORIT 124 #define SPP_CODTRB 125 #define SPp_CODTRB1 126 +#define F_SEZIONE 127 #define SPP_CDC_V1 130 #define SPP_CDC_V2 131 diff --git a/ve/vetbspp.uml b/ve/vetbspp.uml index bedcc4563..3e4cc2b8f 100755 --- a/ve/vetbspp.uml +++ b/ve/vetbspp.uml @@ -42,6 +42,14 @@ BEGIN MESSAGE COPY,20@ END +LISTBOX F_SEZIONE 6 +BEGIN + PROMPT 2 "Sezione per cooperative " + FIELD S11 + ITEM "D|Dare" + ITEM "A|Avere" +END + STRING SPP_CODASSFIS 4 BEGIN PROMPT 2 4 "Codice IVA " diff --git a/ve/vetbtip.uml b/ve/vetbtip.uml index 9e8ca2b6a..b9fb908cd 100755 --- a/ve/vetbtip.uml +++ b/ve/vetbtip.uml @@ -59,6 +59,8 @@ BEGIN ITEM "2|Fattura" MESSAGE ENABLE,2@|ENABLE,F_LORDO ITEM "3|Ordine" MESSAGE CLEAR,2@|ENABLE,F_LORDO ITEM "4|Scontrino" MESSAGE ENABLE,2@|DISABLE,F_LORDO|"X",F_LORDO + ITEM "5|Conferimento soci" MESSAGE CLEAR,2@ + ITEM "6|Prestazioni ai soci" MESSAGE CLEAR,2@ END STRING F_PROFILO 8