diff --git a/ba/batbreg.h b/ba/batbreg.h index 9bf0b3acb..650dd15d6 100755 --- a/ba/batbreg.h +++ b/ba/batbreg.h @@ -46,6 +46,7 @@ #define F_RAGSOC 165 #define F_REGSOSPEXT 166 #define F_STAMPA_PLAFONDS 167 +#define F_STAMPA_NUMERI 168 #define F_PRINTER 201 #define F_CONFIG 202 diff --git a/ba/batbreg.uml b/ba/batbreg.uml index 0dc389184..c48015f0d 100755 --- a/ba/batbreg.uml +++ b/ba/batbreg.uml @@ -158,7 +158,7 @@ END STRING F_ATTIVITA 5 BEGIN - PROMPT 1 9 "Codice attivita' " + PROMPT 1 8 "Codice attivita' " FIELD S8 FLAGS "URZ" GROUP GRP_VENDITE GRP_ACQUISTI GRP_RIEPIVA @@ -176,7 +176,7 @@ END NUMBER F_CODULC 3 BEGIN - PROMPT 35 9 "Unita' locale " + PROMPT 35 8 "Unita' locale " FLAGS "R" GROUP GRP_VENDITE GRP_ACQUISTI GRP_RIEPIVA GRP_INCASSI GRP_GIORNALE GRP_LSOCIALI GRP_GIORNMAG FIELD I7 @@ -198,22 +198,26 @@ END NUMBER F_PAGSTAMP 5 BEGIN - PROMPT 1 11 "Pagine stampate " + PROMPT 1 10 "Pagine stampate " HELP "Numero di pagine gia' stampate" FIELD I1 - FLAGS "R" GROUP 1 END NUMBER F_PAGNUM 5 BEGIN - PROMPT 35 11 "Pagine numerate " + PROMPT 35 10 "Pagine numerate " HELP "numero di pagine di cui e' stata stampata la numerazione" FIELD I2 - FLAGS "R" GROUP 1 END +BOOLEAN F_STAMPA_NUMERI +BEGIN + PROMPT 1 11 "Stampa numeri di pagina durante la stampa del registro" + FIELD S11 +END + DATE F_DATAVID BEGIN PROMPT 1 13 "Data vidimazione " diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index ed3bb5f86..81c593540 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -110,10 +110,11 @@ TMask* TPrimanota_application::load_mask(int n) ism.set_handler(112, fase_handler); else { - ism.hide(111); ism.hide(112); - is.delete_column(112); is.delete_column(111); - for (short id = 155; id <= 157; id++) + for (short id = 111; id <= 114; id++) + { + is.delete_column(id); ism.hide(id); // Descrizioni commessa e fase + } } // Se esiste lo sheet delle rate diff --git a/cg/cg5500.cpp b/cg/cg5500.cpp index efd7d6c7e..3f4955f12 100755 --- a/cg/cg5500.cpp +++ b/cg/cg5500.cpp @@ -940,6 +940,23 @@ HIDDEN void replace_number(TViswin* vsw, long rig, real num, int tab) vsw->replace(rig, str, tab); } +real Visliq_app::min_vers(int anno, int month) +{ + TInteressi_IVA_table ver; + real min; + if (month > 12) + { + if (ver.read(_year, 12) == NOERR) + min = ver.get(I_ANNUALE); + } + else + { + if (ver.read(_year, month) == NOERR) + min = ver.get(I_PERIODICO); + } + return min; +} + void Visliq_app::recalc_liq_data(TViswin* vsw, real& rimb, real& rett, real& vers, real& acc, real& varimp, real& impnonver, real & credspec, TString& d1, TString& d2, TString& d3, TDate& date, @@ -1194,11 +1211,11 @@ void Visliq_app::recalc_liq_data(TViswin* vsw, real& rimb, real& rett, real& ver long idv = vsw->search("IMPORTO DA", x, iadoc, TRUE); if (idv < 0) idv = iadoc+6; - + if (risul > ZERO) { ln = "IMPORTO DA "; - if (risul < IVA_DA_RIPORTARE && month < 13) + if (risul < min_vers(_year, month) && month < 13) ln << "NON "; ln << "VERSARE "; replace_number(vsw, idv, risul, 75); @@ -1342,8 +1359,9 @@ void Visliq_app::recalc_next_liq(int start_month, TSheet_field* sl, TSheet_field risc -= cred; risd -= debt; - // aggiunge nuovo credito o debito - if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE)) + // aggiunge nuovo credito o debito + real min = min_vers(_year, i); + if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < min)) risl += rstart; real newcred(0.0); @@ -1353,7 +1371,7 @@ void Visliq_app::recalc_next_liq(int start_month, TSheet_field* sl, TSheet_field newcred = -rstart; risc -= rstart; } - if (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE) + if (rstart.sign() > 0 && rstart < min) { newdebt = rstart; risd += rstart; @@ -1827,8 +1845,9 @@ void Visliq_app::write_general(TMask& m) risc -= cred; risd -= debt; - // aggiunge nuovo credito o debito - if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE)) + // aggiunge nuovo credito o debito + real min = min_vers(_year, i); + if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < min)) risl += rstart; real newcred(0.0); @@ -1838,7 +1857,7 @@ void Visliq_app::write_general(TMask& m) newcred = -rstart; risc -= rstart; } - if (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE) + if (rstart.sign() > 0 && rstart < min) { newdebt = rstart; risd += rstart; diff --git a/cg/cg5500.h b/cg/cg5500.h index a50f25300..5362b9dc8 100755 --- a/cg/cg5500.h +++ b/cg/cg5500.h @@ -4,7 +4,6 @@ #include // IVA a debito da riportare al mese successivo -#define IVA_DA_RIPORTARE real(50000) class TSheet_field; class TViswin; @@ -99,6 +98,7 @@ public: bool select_butt(TMask& m); TTable* del() { return _del; } + real Visliq_app::min_vers(int anno, int month); // riaggiusta la liquidazione del mese dato void recalc_liq_data(TViswin* v, real& rimb, real& rett, real& vers, real& acc, real& varimp, real& impnonver, real& credspec, diff --git a/db/db0500.cpp b/db/db0500.cpp index db29e06c6..b53b17e8d 100755 --- a/db/db0500.cpp +++ b/db/db0500.cpp @@ -797,7 +797,9 @@ bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long TQuantita qta(art, um, ZERO); m.set(F_UMEXPR, qta.um()); } - } + } + if (e == fe_modify && rec.get_bool("SOSPESO")) + warning_box("Attenzione l'articolo %s e' sospeso.", (const char *) rec.get(ANAMAG_CODART)); break; case LF_DIST : m.set(F_DESCOMP, rec.get("DESCR")); @@ -951,7 +953,7 @@ bool TDistinta_mask::on_field_event(TOperable_field& o, TField_event e, long jol set(F_DESCR, mag.get(ANAMAG_DESCR)); set(F_PREZZO, mag.get(ANAMAG_COSTSTD)); set(F_PESO, mag.get(ANAMAG_PESO)); - set(F_UMP, mag.get(ANAMAG_UMP)); + set(F_UMP, mag.get(ANAMAG_UMP)); } break; case 'L': diff --git a/include/msksheet.cpp b/include/msksheet.cpp index 2690c9764..1e084ccac 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -177,6 +177,8 @@ class TSpreadsheet : public TControl protected: //@cmember Gestisce gli eventi delle celle (chiamata dal ) virtual bool event_handler(XI_OBJ* itf, XI_EVENT* xiev); + + KEY barcode_newline() const; //@cmember Copia una cella nel corrispondente campo della maschera e ne ritorna il contenuto const char* copy_cell2field(XI_OBJ* cell = NULL); @@ -365,7 +367,18 @@ public: -// @doc INTERNAL +KEY TSpreadsheet::barcode_newline() const +{ + static KEY _barcode_newline = 0xFFFF; + if (_barcode_newline == 0xFFFF) + { + TConfig ini(CONFIG_INSTALL, "Main"); + _barcode_newline = ini.get_int("BarcodeNewline"); + } + return _barcode_newline; +} + +// @doc INTERNAL // @mfunc Costruttore TSpreadsheet::TSpreadsheet( @@ -990,6 +1003,11 @@ bool TSpreadsheet::test_focus_change() // Certified 75% bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev) { + static KEY _lastab = K_TAB; + static char tmp[16]; + static clock_t digit_timer = 0; + + BOOLEAN& refused = xiev->refused; switch (xiev->type) @@ -1435,7 +1453,20 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev) case XIE_CHAR_CELL: if (_edit_field) { - const KEY k = xiev_to_key(xiev); + KEY k = xiev_to_key(xiev); + + if (isalnum(k)) + digit_timer = clock(); + else + { + if (k == barcode_newline()) + { + const clock_t delay = clock() - digit_timer; + if (delay <= 60) + k = K_CTRL+'+'; + } + } + switch(k) { case K_F2: diff --git a/include/relation.cpp b/include/relation.cpp index 435951936..ff71fd9fd 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -1314,7 +1314,7 @@ void TCursor::filter( _filter = fil; if (_fexpr) delete _fexpr; _frefs.destroy(); - TTypeexp type = (_filter.find('"') != -1) ? _strexpr : _numexpr; + TTypeexp type = (_filter.find('"') >= 0) ? _strexpr : _numexpr; if (_filter.not_empty()) { _fexpr = new TExpression(_filter, type); diff --git a/mg/batbcau.h b/mg/batbcau.h index 2632569d4..6f67c056f 100755 --- a/mg/batbcau.h +++ b/mg/batbcau.h @@ -39,6 +39,7 @@ #define F_DESCDEFDEP 146 #define H_DEFAULTMAG 147 #define F_STOP_PROD 148 +#define F_MOV_SOSP 149 #define G_SGNVAL 20 #define G_SGNQTA 21 diff --git a/mg/batbcau.uml b/mg/batbcau.uml index 77f01d785..7cf13499b 100755 --- a/mg/batbcau.uml +++ b/mg/batbcau.uml @@ -163,8 +163,8 @@ END BOOLEAN F_STOP_PROD BEGIN - PROMPT 50 15 "Scarica gli art.di produzione" - FIELD B4 + PROMPT 50 15 "Scarica gli art.di produzione" + FIELD B4 END LISTBOX F_COSTO_ESPL 14 @@ -228,6 +228,13 @@ BEGIN FLAGS "D" PROMPT 32 19 "" END + +BOOLEAN F_MOV_SOSP +BEGIN + PROMPT 2 20 "Movimenta gli articoli sospesi" + FIELD B5 +END + ENDPAGE PAGE "Movimentazione campi" 11 60 14 diff --git a/mg/mg1100.cpp b/mg/mg1100.cpp index 51d2b3c92..4e51ac57f 100755 --- a/mg/mg1100.cpp +++ b/mg/mg1100.cpp @@ -38,7 +38,9 @@ class TMask_movmag : public TMask static bool handle_righeprezzo2(TMask_field &f, KEY k); // handler del prezzo delle righe static bool handle_codcaus(TMask_field &fld, KEY k); // handler della causale static bool handle_datacomp(TMask_field &, KEY k); // handler del numero di registrazione + static bool handle_checksosp(TMask_field &fld, KEY k); // handler static bool handle_codarticolo(TMask_field &fld, KEY k); // handler + static bool handle_causrig(TMask_field &fld, KEY k); // handler static bool handle_giacattuale(TMask_field &fld, KEY k); // handler della giacenza attuale static bool codgrp_handler(TMask_field &fld, KEY k); // handler del codice gruppo static void sheetrighe_put(TSheet_field &fld_righe, int item); @@ -81,7 +83,7 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m) set_handler(F_DATACOMP, handle_datacomp); set_handler(F_CODCAUS, handle_codcaus); ss.sheet_mask().field(F_QUANT).set_handler(handle_righeprezzo1); - ss.sheet_mask().field(F_CAUSRIG).set_handler(handle_righeprezzo1); + ss.sheet_mask().field(F_CAUSRIG).set_handler(handle_causrig); ss.sheet_mask().field(F_CODART).set_handler(handle_codarticolo); ss.sheet_mask().field(F_GIAC).set_handler(handle_giacattuale); ss.set_notify(notify_righe); @@ -311,18 +313,56 @@ TArticolo_giacenza& TMask_movmag::curr_art() return *_curr_art; } +bool TMask_movmag::handle_checksosp(TMask_field &f, KEY k) +{ + if (k==K_TAB && f.focusdirty()) + { + TMask_movmag& mov_mask = (TMask_movmag &)f.mask().get_sheet()->mask(); + TMask & row_mask = f.mask(); + TString16 caus(row_mask.get(F_CAUSRIG)); + + mov_mask.curr_art().read(row_mask.get(F_CODART)); + + if (caus.empty()) + caus = mov_mask.get(F_CODCAUS); + + const TCausale_magazzino c(caus); + + if (!c.movimenta_sospesi() && mov_mask.curr_art().get_bool("SOSPESO")) + return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)f.get()); + } + return TRUE; +} + bool TMask_movmag::handle_codarticolo(TMask_field &f, KEY k) { if (k==K_TAB) { - // TMask_movmag& maskmov = (TMask_movmag&)f.mask(); TMask_movmag& maskmov = (TMask_movmag &)f.mask().get_sheet()->mask(); maskmov.curr_art().read(f.get()); if (f.focusdirty()) + { + if (!handle_checksosp(f, k)) + return FALSE; handle_righeprezzo2(f, k); - } + } + } + return TRUE; } + +bool TMask_movmag::handle_causrig(TMask_field &f, KEY k) +{ + if (k==K_TAB && f.focusdirty()) + { + if (!handle_checksosp(f, k)) + return FALSE; + handle_righeprezzo1(f, k); + } + + return TRUE; +} + // proposta hard: propone il prezzo in ogni caso bool TMask_movmag::handle_giacattuale(TMask_field &f, KEY k) { diff --git a/mg/mglib.h b/mg/mglib.h index 9b2a6322f..40f3d1319 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -447,6 +447,8 @@ public: bool update_val() const {return !get_bool("B0");} bool update_ultcos() const {return get_bool("B2");} bool esplodente() const {return get_bool("B3");} + bool scarica_artprod() const {return get_bool("B4");} + bool movimenta_sospesi() const {return get_bool("B5");} const TString & default_magdep() const {return get("S10");} const char *default_mag() const {return get("S10").mid(0,3);} const char *default_dep() const {return get("S10").mid(3,2);} diff --git a/ve/f47.dir b/ve/f47.dir index 94ad96436..caea4f95b 100755 --- a/ve/f47.dir +++ b/ve/f47.dir @@ -1,3 +1,3 @@ 47 0 -$anamag|0|0|801|0|Anagrafica di magazzino|NART|| +$anamag|0|0|802|0|Anagrafica di magazzino|NART|| diff --git a/ve/f47.trr b/ve/f47.trr index d75e533e7..c33be94fc 100755 --- a/ve/f47.trr +++ b/ve/f47.trr @@ -1,5 +1,5 @@ 47 -69 +70 CODART|1|20|0|Codice Articolo DESCR|1|50|0|Descrizione DESCRAGG|11|10|0|Descrizione aggiuntiva @@ -59,6 +59,7 @@ CONTOINDA|1|12|0|Codice piano dei conti industriale (GrCoSo) Acquisti CONTOINDV|1|12|0|Codice piano dei conti industriale (GrCoSo) Vendite COLLTYPE|1|1|0|Tipo collegamento DB CODMAG|1|5|0|Codice magazzino +SOSPESO|8|1|0|Codice sospeso (obsoleto) USER1|1|40|0|Campo libero 1 USER2|1|20|0|Campo libero 2 USER3|1|20|0|Campo libero 3 diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index fac677f00..1e5f35f0d 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -469,9 +469,14 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query) // l'autoload ?? f.insert(-1, FALSE); // Aggiunge la riga allo sheet - // ((TDocumento_mask &) msk).autoload(f.items()); // Cagata tremenda: non capisco + const bool checked = rec.get_bool(RDOC_CHECKED); + + rec.autoload(f); f.check_row(f.items()-1, 0x2); + + if (!checked) //se non e' checked, il record viene autosalvato (in modo che sia salvato completamente) + rec.autosave(f); } } msk.set_mode(oldmode); diff --git a/ve/ve2400.h b/ve/ve2400.h index e15e0084c..d2fc7077e 100755 --- a/ve/ve2400.h +++ b/ve/ve2400.h @@ -162,6 +162,7 @@ #define F_NUMRIGULC1 301 #define F_NUMREGULC2 302 #define F_NUMRIGULC2 303 +#define F_SOSPESO 304 #define G_CODART 1 #define G_DESART 2 diff --git a/ve/ve2400.uml b/ve/ve2400.uml index 09b3ea8af..a0bf391de 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -175,6 +175,12 @@ BEGIN FLAG "U" END +BOOLEAN F_SOSPESO +BEGIN + PROMPT 45 7 "Sospeso" + FIELD SOSPESO +END + TEXT DLG_NULL BEGIN PROMPT 2 8 "@bCodici corrispondenti" diff --git a/ve/ve5100.cpp b/ve/ve5100.cpp index f5b620630..4a8d29ab6 100755 --- a/ve/ve5100.cpp +++ b/ve/ve5100.cpp @@ -15,13 +15,15 @@ class TDeletedoc_app : public TSkeleton_application { TArchive _arc; TString _desc, _last_std; + TString16 _num; + int _anno; char _unit; TFilename _tmp_dir; TIsamtempfile *_tdoc,*_trdoc; protected: - void backup_delete_doc(int op, int who); // Backup e cancellazione dei documenti da eliminare + void backup_delete_doc(int op, int who, bool pack_rows); // Backup e cancellazione dei documenti da eliminare void restore_doc(); // Ripristino documenti da disco void create_tmp_files(bool create=TRUE); void delete_tmp_files(bool remove=TRUE); @@ -45,13 +47,14 @@ bool TDeletedoc_app::state_handler(TMask& m, KEY k) return TRUE; } -void TDeletedoc_app::backup_delete_doc(int op, int who) +void TDeletedoc_app::backup_delete_doc(int op, int who, bool pack_rows) { TIsamfile doc(LF_DOC); TIsamfile rdoc(LF_RIGHEDOC); TIsamfile clifo(LF_CLIFO); TIsamfile cfven(LF_CFVEN); + TIsamfile indsp(LF_INDSP); TIsamfile tab(LF_TAB); TIsamfile occas(LF_OCCAS); TIsamfile movmag(LF_MOVMAG); @@ -62,12 +65,14 @@ void TDeletedoc_app::backup_delete_doc(int op, int who) rdoc.open(); clifo.open(); cfven.open(); + indsp.open(); tab.open(); occas.open(); movmag.open(); rmovmag.open(); - int err = doc.lock(); + int err= NOERR; +// int err = doc.lock(); if (err != NOERR) { error_box("Il file documenti non puo' essere bloccato in modo esclusivo." @@ -80,6 +85,7 @@ void TDeletedoc_app::backup_delete_doc(int op, int who) create_tmp_files(); TString_array to_zap; // Array contenente le chiavi dei documenti da eliminare + TString_array to_pack; // Array contenente le chiavi dei documenti da compattare TRecnotype total = 0; doc.zero(); @@ -89,8 +95,12 @@ void TDeletedoc_app::backup_delete_doc(int op, int who) for (int scanerr = doc.first(); scanerr == NOERR && !p.iscancelled(); scanerr = doc.next()) - { + { p.addstatus(1); + if (_anno != 0 && _anno != doc.get_int(DOC_ANNO)) + continue; + if (_num.not_empty() && _num != doc.get(DOC_CODNUM)) + continue; documento.read(doc.curr()); bool to_delete = FALSE; @@ -106,6 +116,24 @@ void TDeletedoc_app::backup_delete_doc(int op, int who) to_delete = TRUE; } + if (pack_rows && !to_delete && documento.tipo().is_ordine()) + { + const int rows = documento.physical_rows(); + for (int x = 1; x <= rows; x++) + { + if (documento[x].is_evasa()); + { + TToken_string id(30); + id = doc.get(DOC_PROVV); + id.add(doc.get(DOC_ANNO)); + id.add(doc.get(DOC_CODNUM)); + id.add(doc.get(DOC_NDOC)); + to_pack.add(id); + break; + } + } + } + if (to_delete) // Se TRUE il puo' essere eliminato! { // Memorizza la chiave 1 del documento in un array if (op & 0x1) @@ -158,20 +186,42 @@ void TDeletedoc_app::backup_delete_doc(int op, int who) TString caption("Confermare la cancellazione di "); caption.add_plural(total, "documento"); if (yesno_box(caption)) - { - TProgind pi(total, caption, FALSE, TRUE, 10); - for (int i = 0; i < to_zap.items(); i++) - { - TToken_string& id = to_zap.row(i); - id.restart(); - const char provv = id.get_char(); - const int anno = id.get_int(); - const TString16 codnum = id.get(); - const long numdoc = id.get_int(); - documento.read(provv,anno,codnum,numdoc); - documento.TMultiple_rectype::remove(doc); - pi.addstatus(1); - } + { + { + TProgind pi(total, caption, FALSE, TRUE, 10); + for (int i = 0; i < to_zap.items(); i++) + { + TToken_string& id = to_zap.row(i); + id.restart(); + const char provv = id.get_char(); + const int anno = id.get_int(); + const TString16 codnum = id.get(); + const long numdoc = id.get_int(); + documento.read(provv,anno,codnum,numdoc); + documento.TMultiple_rectype::remove(doc); + pi.addstatus(1); + } + } + { + TProgind pi1(to_pack.items(), "Compattamento documenti", FALSE, TRUE, 10); + for (int i = 0; i < to_pack.items(); i++) + { + TToken_string& id = to_pack.row(i); + id.restart(); + const char provv = id.get_char(); + const int anno = id.get_int(); + const TString16 codnum = id.get(); + const long numdoc = id.get_int(); + documento.read(provv,anno,codnum,numdoc); + const int rows = documento.physical_rows(); + // Memorizza le righe del documento sui file temporanei + for (int x = rows; x >= 1; x--) + if (documento[x].is_evasa()) + documento.destroy_row(x, TRUE); + documento.rewrite(doc); + pi1.addstatus(1); + } + } } } } @@ -289,11 +339,14 @@ void TDeletedoc_app::main_loop() _desc = m.get(F_DESC); const int scelta = m.get_int(F_OPERAZIONE); const int cosa = m.get_int(F_DOCUMENTI); + const bool pack_rows = m.get_bool(F_COMPATTA); + _anno = m.get_int(F_ANNO); + _num = m.get(F_CODNUM); switch (scelta) { - case 1 : backup_delete_doc(0x1, cosa); break; - case 2 : backup_delete_doc(0x2, cosa); break; - case 3 : backup_delete_doc(0x3, cosa); break; + case 1 : backup_delete_doc(0x1, cosa, pack_rows); break; + case 2 : backup_delete_doc(0x2, cosa, pack_rows); break; + case 3 : backup_delete_doc(0x3, cosa, pack_rows); break; default: restore_doc(); break; } } diff --git a/ve/ve5100a.h b/ve/ve5100a.h index 5e6d69a66..7f27735ef 100755 --- a/ve/ve5100a.h +++ b/ve/ve5100a.h @@ -4,4 +4,8 @@ #define F_STADESC 104 #define F_OPERAZIONE 105 #define F_DOCUMENTI 106 +#define F_COMPATTA 107 +#define F_ANNO 108 +#define F_CODNUM 109 +#define F_DESNUM 110 diff --git a/ve/ve5100a.uml b/ve/ve5100a.uml index 9eb3e7853..7d1e345e3 100755 --- a/ve/ve5100a.uml +++ b/ve/ve5100a.uml @@ -1,26 +1,29 @@ #include "ve5100a.h" -PAGE "Eliminazione/Archiviazione documenti" -1 -1 61 11 +PAGE "Eliminazione/Archiviazione documenti" -1 -1 61 15 RADIOBUTTON F_OPERAZIONE 1 34 BEGIN PROMPT 1 1 "Operazione" ITEM "1|Eliminazione" - MESSAGE DISABLE,F_DESC|DISABLE,F_UNIT + MESSAGE DISABLE,F_DESC|DISABLE,F_UNIT|ENABLE,F_ANNO|ENABLE,F_CODNUM ITEM "2|Archiviazione" - MESSAGE ENABLE,F_DESC|ENABLE,F_UNIT + MESSAGE ENABLE,F_DESC|ENABLE,F_UNIT|ENABLE,F_ANNO|ENABLE,F_CODNUM ITEM "3|Eliminazione e archiviazione" - MESSAGE ENABLE,F_DESC|ENABLE,F_UNIT + MESSAGE ENABLE,F_DESC|ENABLE,F_UNIT|ENABLE,F_ANNO|ENABLE,F_CODNUM ITEM "4|Ripristino" - MESSAGE DISABLE,F_DESC|ENABLE,F_UNIT + MESSAGE DISABLE,F_DESC|ENABLE,F_UNIT|CLEAR,F_ANNO|CLEAR,F_CODNUM END RADIOBUTTON F_DOCUMENTI 1 24 BEGIN PROMPT 36 1 "Documenti" - ITEM "1|Eliminabili" + ITEM "1|Eliminabili" + MESSAGE CLEAR,F_COMPATTA ITEM "2|Evasi" + MESSAGE ENABLE,F_COMPATTA ITEM "3|Entrambi" + MESSAGE ENABLE,F_COMPATTA END LIST F_UNIT 2 @@ -55,6 +58,46 @@ BEGIN FLAGS "D" END +BOOELAN F_COMPATTA +BEGIN + PROMPT 2 9 "Elimina la righe evase" +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 2 10 "Esercizio " + FIELD ANNO + WARNING "Inserire un anno valido" +END + +STRING F_CODNUM 4 +BEGIN + PROMPT 2 11 "Numerazione " + FIELD CODNUM + HELP "Codice numerazione" + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + CHECKTYPE NORMAL + FLAG "U" + WARNING "Numerazione assente" +END + +STRING F_DESNUM 50 42 +BEGIN + PROMPT 15 12 "" + HELP "Descrizione numerazione" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODNUM +END + + BUTTON DLG_OK 10 2 BEGIN PROMPT -12 -1 "" diff --git a/ve/ve6100.cpp b/ve/ve6100.cpp index 250b3327d..9c8dcc641 100755 --- a/ve/ve6100.cpp +++ b/ve/ve6100.cpp @@ -246,7 +246,7 @@ bool TContabilizzazione_app::create() { TApplication::create(); open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN, - LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_PROVV, + LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_PROVV, LF_MOV, LF_PCON, LF_CONDV, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); _msk = new TMask("ve6100a"); _msk->set_handler(F_CODICE_ELAB,handle_cod_eld); diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index fd3f2accf..085b64ccc 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -75,12 +75,13 @@ public: TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type) { CHECK(_caus,"Orgggssbb..._caus pointer is NULL!"); - bool dare; + bool dare = FALSE; if (row_type == 'S') { dare = _caus->sezione_ritsoc() == 'D'; } else + { if (row_type == 'F') { dare = _caus->sezione_ritsoc() == 'D'; @@ -91,7 +92,7 @@ TImporto TMovimentoPN_VE::real2imp(const real& r, char row_type) if (row_type != 'T' && row_type != 'F') dare = !dare; } - + } TImporto importo(dare ? 'D' : 'A', r); return importo; } @@ -558,11 +559,12 @@ error_type TIVA_array::add_omaggi(const TRiga_documento & r, const TBill& conto, add(r, conto, ndec, p); TRiga_documento r_storno(r); + r_storno.set_tipo("01"); r_storno.put(RDOC_CODIVA, _ivasto); real prezzo = r_storno.get(RDOC_PREZZO); prezzo = -prezzo; r_storno.put(RDOC_PREZZO, prezzo); - add(r, conto, ndec, p); + add(r_storno, conto, ndec, p); return no_error; } @@ -1890,13 +1892,20 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc) continue; r.put(RDOC_CODIVA, codiva1); - _righe_iva->add(r, conto, ALL_DECIMALS, perc); + if (riga_omaggio) + _righe_iva->add_omaggi(r, conto, ALL_DECIMALS, perc); + else + _righe_iva->add(r, conto, ALL_DECIMALS, perc); + } r.put(RDOC_CODIVA, codiva2); //Restore } else { - _righe_iva->add(r, conto); + if (riga_omaggio) + _righe_iva->add_omaggi(r, conto); + else + _righe_iva->add(r, conto); const TString16 cod(r.get(RDOC_CODIVA)); if (r.doc().tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale() sono esclusivi. @@ -2869,12 +2878,20 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) paeseorig = !is_cessione ? rec_anamag.get(ANAMAG_PAESE) : EMPTY_STRING; // Campo solo per Acquisti provincia = is_cessione ? rec_anamag.get(ANAMAG_PROV) : cchh.get(LF_COMUNI, commag, COM_PROVCOM); - if (nomenclatura.blank() || unsuppun.is_zero() || massanun.is_zero()) + if (nomenclatura.blank() || unsuppun.is_zero() || massanun.is_zero() || provincia.blank()) { TString msg; - msg << "--- L'articolo " << rec_anamag.get(ANAMAG_CODART) << " non riporta tutti i dati necessari per il movimento intracomunitario:"; + msg << "--- L'articolo " << rec_anamag.get(ANAMAG_CODART) << " non riporta tutti i dati necessari per il movimento intracomunitario."; + _viswin->add_line(msg); + msg = " Si consiglia di verificare i seguenti valori sull'anagrafica:"; + _viswin->add_line(msg); + msg = " "; + if (nomenclatura.blank()) msg << "nomenclatura combinata; "; + if (unsuppun.is_zero()) msg << "unità di misura supplementare; "; + if (massanun.is_zero()) msg << "massa netta unitaria; "; + if (provincia.blank()) msg << "provincia d'origine; "; + msg.rtrim(2); msg << '.'; // Sostituisce l'ultimo punto e virgola con un punto _viswin->add_line(msg); - _viswin->add_line(" Verificare i seguenti valori: nomenclatura combinata, unità di misura supplementare, massa netta unitaria."); } key.cut(0); @@ -3118,7 +3135,7 @@ void TContabilizzazione::display_error(TDocumento& doc) "Verificare la consistenza dei files relativi ai movimenti intracomunitari.",(const char*)numerazione,numero); break; case cont_seq_error: - msg.format("Il documento precedente al %s/%ld non e' stato contabilizzato.\n" + msg.format("Il documento precedente al %s/%ld non e' stato contabilizzato." "E' necessario contabilizzare tutti i documenti in sequenza.", (const char*)numerazione, numero); break; @@ -3347,7 +3364,9 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& /* else message_box("Contabilizzazione terminata"); } - _viswin->run(); + KEY k = _viswin->run(); + if (k == K_CTRL+'S') // Ho premuto Stampa + printer().print_txt(_viswin->text()); delete _viswin; _viswin = NULL; return _can_write; // Se non ha riscontrato errori per nessun documento, _can_write = TRUE diff --git a/ve/velib06.cpp b/ve/velib06.cpp index cc93572c4..83127acaf 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -1621,6 +1621,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll } break; case F_ELAB: + case F_ANNO_ELAB: if (e == fe_modify) update_ndoc_filter(TRUE); break; @@ -1660,6 +1661,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll { const TRectype& head = _tree.testata(); set(F_DATADOC_ELAB, head.get(DOC_DATADOC)); // Anch'essa nella chiave 2! + set(F_ANNO_ELAB, head.get(DOC_ANNO)); set(F_CODNUM_ELAB, head.get(DOC_CODNUM)); field(F_CODNUM_ELAB).check(); set(F_NDOC_ELAB, head.get(DOC_NDOC)); @@ -1840,6 +1842,13 @@ bool TElabora_mask::elabora() delete newdoc; + // Azzera l'anno in caso di ordini + if (in.items() > 0 && in[0].is_ordine()) + { + reset(F_ANNO_ELAB); + update_mask = TRUE; + } + if (update_mask) update_ndoc_filter(); @@ -1958,6 +1967,11 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) TString8 si; si << stato_in; set(F_STATODOC_ELAB, si); field(F_STATODOC_ELAB).check(); + + // Azzero anno di elaaborazione quando ho a che fare con degli ordini + const TTipo_documento& tipodocin = _main->doc().tipo(tipo_in); + if (tipodocin.is_ordine()) + reset(F_ANNO_ELAB); } } if (almost_one) @@ -1993,12 +2007,18 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) field(F_TIPODOC_ELAB).check(); set(F_STATODOC_ELAB, stato_in); field(F_STATODOC_ELAB).check(); + + // Azzero anno di elaaborazione quando ho a che fare con degli ordini + const TTipo_documento& tipodocin = _main->doc().tipo(tipo_in); + if (tipodocin.is_ordine()) + reset(F_ANNO_ELAB); } } } if (almost_one) filter << ')'; } + } else { @@ -2119,8 +2139,8 @@ TElabora_mask::TElabora_mask(TDocumento_mask& main_mask) : TAutomask("ve0100b"), _main(&main_mask) { _myself = this; - - set(F_ANNO_ELAB, _main->get(F_ANNO)); + + set(F_ANNO_ELAB, _main->get(F_ANNO)); set(F_TIPOCF_ELAB, _main->get(F_TIPOCF)); set(F_CODCF_ELAB, _main->get(F_CODCF)); set(F_CODVAL_ELAB, _main->get(F_CODVAL)); @@ -2322,14 +2342,50 @@ bool TDocumento_mask::codcamp_handler( TMask_field& f, KEY key ) return TRUE; } +/* +bool TDocumento_mask::controeuro_handler( TMask_field& f, KEY key ) +{ + TMask & m = f.mask(); + + if (m.is_running() && key == K_SPACE) + { + const real cambio_euro = TCurrency::get_euro_change(); + const real val = cambio_euro / m.get_real(F_CAMBIO); + + m.set(F_CAMBIO, val); + } + return TRUE; +} +*/ + bool TDocumento_mask::codval_handler( TMask_field& f, KEY key ) + { if (key == K_TAB && f.focusdirty()) - { - TSheet_field& righe = f.mask().sfield(F_SHEET); + { + TMask& m = f.mask(); + + // Cerco un cambio per la data specificata, se non lo trovo lo invento + TDate datacam = m.get(F_DATACAMBIO); + if (!datacam.ok()) + { + datacam = m.get_date(F_DATADOC); + m.set(F_DATACAMBIO, datacam); + } + TExchange exc(f.get()); + exchange_type et; + real cambio = exc.get_change(et); // Determino il cambio standard ed il "Contro-Euro" + TString16 key; + key.format("%-3s", (const char*)f.get()); key << datacam.string(ANSI); + const real giornaliero = cache().get("CAM", key, "S4"); + if (!giornaliero.is_zero()) + cambio = giornaliero; // Ho trovato un cambio per il giorno! + m.set(F_CAMBIO, cambio); + m.set(F_CONTROEURO, et == _exchange_contro ? "X" : ""); + + TSheet_field& righe = m.sfield(F_SHEET); righe.force_update(); } return TRUE; } - diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 2905b4b3c..44f23a15b 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -372,7 +372,6 @@ bool codmag_handler( TMask_field& f, KEY key ) bool codmag_coll_handler( TMask_field& f, KEY key ) { -// if (f.to_check(key, TRUE)) if (key == K_TAB && f.focusdirty()) { TMask& row_mask = f.mask(); @@ -428,7 +427,6 @@ void upd_colli_peso_tara(TMask & m, TRectype & a) bool pricerange_handler(TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) { TMask& row_mask = f.mask(); @@ -496,14 +494,9 @@ bool codart_handler(TMask_field& f, KEY key ) condv.set_testa(&mask); condv.set_riga(&row_mask); -// TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file(); -// TLocalisamfile & umart = ((TEdit_field &) row_mask.field(FR_UMQTA)).browse()->cursor()->file(); TLocalisamfile anamag(LF_ANAMAG); TLocalisamfile umart(LF_UMART); -// condv.set_anamag(anamag); -// condv.set_umart(umart); - TString80 codart(f.get()); anamag.setkey(1); anamag.put(ANAMAG_CODART, codart); @@ -603,6 +596,28 @@ bool codart_handler(TMask_field& f, KEY key ) if (pos >= 0) iva_handler(row_mask.fld(pos), 0); + + if (found) + { + TString16 caus(row_mask.get(FR_CAUS)); + + if (caus.empty()) + caus = mask.get(F_CAUSMAG); + + if (caus.not_empty()) + { + const TCausale_magazzino c(caus); + + if (!c.movimenta_sospesi()) + { + const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); + + if (rec.get_bool("SOSPESO")) + return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)codart); + } + } + } + } else if (key == K_F8 && !sh.sheet_mask().is_running()) @@ -629,12 +644,6 @@ bool codart_handler(TMask_field& f, KEY key ) } if (explode_db && !sh.sheet_mask().is_running()) { -// TCodice_articolo a(f.get()); -// const TCodice_um um = row_mask.get(FR_UMQTA); -// real qta_fin = row_mask.get_real(FR_QTA); -// TQuantita qta(a, um, qta_fin); -// qta.convert2umbase(); -// qta_fin = qta.val(); TDocumento & doc = mask.doc(); TRiga_documento & curr_row = doc[current_doc_row]; @@ -699,6 +708,8 @@ bool codart_handler(TMask_field& f, KEY key ) } } } + + return TRUE; } @@ -706,6 +717,9 @@ bool codartmag_handler( TMask_field& f, KEY key ) { bool to_check = key == K_TAB && f.focusdirty(); TMask & m = f.mask(); + const TString codart = f.get(); + const bool artmag = codart.not_empty(); + TDocumento_mask& mask= (TDocumento_mask&) m.get_sheet()->mask(); if (!to_check) { @@ -715,12 +729,10 @@ bool codartmag_handler( TMask_field& f, KEY key ) } if (to_check) { - const bool artmag = f.get().not_empty(); m.show(FR_UMQTA, artmag); m.show(FR_UMQTA2, !artmag); - TDocumento_mask& mask=(TDocumento_mask&)m.get_sheet()->mask(); mask.update_giacenza(); } return TRUE; @@ -1147,6 +1159,13 @@ bool causmag_handler( TMask_field& f, KEY key ) row_mask.set(FR_CODDEPC, mask.stddep(), TRUE); } } + if (!c.movimenta_sospesi()) + { + const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); + + if (rec.get_bool("SOSPESO")) + return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)rec.get(ANAMAG_CODART)); + } } } return TRUE; @@ -1165,7 +1184,7 @@ bool sppr_handler( TMask_field& f, KEY key ) TMask & mask = row_mask.get_sheet()->mask(); TEdit_field & e = (TEdit_field &) f; TRelation * r = e.browse()->cursor()->relation(); - TString16 cod = r->curr().get("COD"); + const TString16 cod = r->curr().get("COD"); TSpesa_prest sp(NULL, cod == "SPP" ? 'S' : 'P'); if (sp.read(row_mask.get(FR_CODART)) == NOERR) { @@ -1199,7 +1218,7 @@ bool sppr_handler( TMask_field& f, KEY key ) { const real cambio = mask.get(F_CAMBIO); real prezzo = sp.prezzo(); - const TString16 doc_valuta(mask.get(F_CODVAL)); + const TString& doc_valuta = mask.get(F_CODVAL); const bool controeuro = mask.get_bool(F_CONTROEURO); sppr_calc(sp, doc_valuta, cambio, prezzo, controeuro ? _exchange_contro : _exchange_base); diff --git a/xi/xiextend.h b/xi/xiextend.h new file mode 100755 index 000000000..0d539e8c6 --- /dev/null +++ b/xi/xiextend.h @@ -0,0 +1,65 @@ +/******************************************************************************* +* Copyright 1991-1995 by ORCA Software, Inc. * +* * +* All rights reserved. May not be reproduced or distributed, in printed or * +* electronic form, without permission of ORCA Software, Inc. * +*******************************************************************************/ + +#ifdef WSWIN +#define NOCOMM +#define NOMINMAX +#define NOGDICAPMASKS +#define NOVIRTUALKEYCODES +#define NOWINMESSAGES +#define NOWINSTYLES +#define NOSYSMETRICS +#define NOMENUS +#define NOICONS +#define NOKEYSTATES +#define NOSYSCOMMANDS +#define NORASTEROPS +#define NOSHOWWINDOW +#define OEMRESOURCE +#define NOATOM +#define NOCLIPBOARD +#define NOCOLOR +#define NOCTLMGR +#define NODRAWTEXT +#define NOGDI +#define NOKERNEL +/* #define NOUSER */ +#define NOMB +#define NOMEMMGR +#define NOMETAFILE +#define NOMINMAX +#define NOMSG +#define NOOPENFILE +#define NOSCROLL +#define NOSOUND +#define NOTEXTMETRIC +#define NOWH +#define NOWINOFFSETS +#define NOCOMM +#define NOKANJI +#define NOHELP +#define NOPROFILER +#define NODEFERWINDOWPOS +#include +#define INTERNAL +#endif + +#ifdef OSOS2 +#define INCL_DOS +#define INCL_WIN +#define INCL_GPI +#define COLOR pm_COLOR +#define UINT pm_UINT +#define ULONG pm_ULONG +#include +#undef COLOR +#undef UINT +#undef ULONG +#define INTERNAL +#endif + +