diff --git a/lv/lv0.cpp b/lv/lv0.cpp index 0674d83d2..070aeb36f 100755 --- a/lv/lv0.cpp +++ b/lv/lv0.cpp @@ -11,6 +11,7 @@ int main(int argc, char** argv) case 2: lv0300(argc, argv); break; // parametri lavanderie lv0300 case 3: lv0400(argc, argv); break; // gestione contratti lv0400 case 4: lv0500(argc, argv); break; // passaggi planning per contratto lv0500 (e periodi di sospensione) + case 5: lv0600(argc, argv); break; // gestione manuale bolle lv0600 default: lv0100(argc, argv); break; // gestione tabelle lv0100 } return 0; diff --git a/lv/lv0600.cpp b/lv/lv0600.cpp new file mode 100755 index 000000000..a63469ebe --- /dev/null +++ b/lv/lv0600.cpp @@ -0,0 +1,201 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "../ve/velib.h" +#include "../ve/sconti.h" +#include "../ve/vepriv.h" +#include "../mg/anamag.h" +#include "../ve/ve0100.h" +#include "../ve/veini.h" +#include "../ve/veuml.h" +#include "../ve/veuml1.h" +#include "../ve/verig.h" + +#include "../mg/mglib.h" + +#include "lv0.h" +#include "lvlib.h" +#include "../mg/anamag.h" +#include "clifo.h" +#include "lvcondv.h" +#include "lvrcondv.h" + +//definizione della maschera di inserimento +class TGestione_bolle_msk : public TDocumento_mask +{ +protected: + static bool lv_bolla_handler(TMask_field& f, KEY k); +public: + virtual void user_set_handler( int fieldid, int index); + TGestione_bolle_msk(const char* tipodoc):TDocumento_mask(tipodoc) {} +}; + +bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) +{ + bool ok = true; + if (f.dlg() == F_CODCF) + ok = TDocumento_mask::clifo_handler( f, k ); + + if (ok && k == K_TAB && f.focusdirty()) + { + TMask& msk = f.mask(); + + TDocumento_mask& dmsk = (TDocumento_mask&)msk; + TDocumento& doc = dmsk.doc(); + + static long stcodcf = 0, stcodcont = 0; + + TSheet_field& sheet = dmsk.sfield(F_SHEET); + int nrighe = sheet.items(); + + const long codcf = msk.get_long(F_CODCF); + const int indsped = msk.get_int(F_CODINDSP); + TDate datadoc = msk.get_date(F_DATADOC); + if (!datadoc.ok()) + datadoc = TODAY; + const int anno = datadoc.year(); + + if (codcf <= 0) + return false; + + const long codcont = lv_find_contract(codcf,indsped,datadoc); + + if (stcodcf == codcf && stcodcont == codcont && nrighe > 0) + return false; + + if (codcont == 0) + return warning_box(TR("Non ci sono contratti in essere alla data indicata")); + + dmsk.mask2doc(); + + stcodcf = codcf; + stcodcont = codcont; + + //elimino tutte le righe del documento + doc.destroy_rows(); + + //tipo riga + const TString4 tprig = msk.get(F_LBTIPORIGA); + + //preparo la chiave per la tabella contratti + TToken_string keycont; + keycont.add(codcf); + keycont.add(codcont); + //instanzio una cache sulla tabella dei contratti + const TRectype& tcont = cache().get(LF_LVCONDV,keycont); + //estraggo i dati di interesse dalla cache + const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino + const bool prinbo = tcont.get_bool(LVCONDV_STPRZBOL); //prezzo in bolla + + //instanzio un recordset sulle righe del contratto considerato + TISAM_recordset rcont("USE LVRCONDV\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT"); + rcont.set_var("#CODCF",codcf); + rcont.set_var("#CODCONT",codcont); + + //per ogni riga estraggo l'articolo, il relativo prezzo e l'eventaule sconto da applicare, + //...riportati in bolla solo se necessario + for (bool ok = rcont.move_first(); ok; ok = rcont.move_next()) + { + //creo una nuova riga documento + TRiga_documento& rdoc = doc.new_row(tprig); + + //recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet + const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); + //instanzio una cache sulla tabella del magazzino + const TRectype& anamag = cache().get(LF_ANAMAG,codart); + + rdoc.put(RDOC_CODART,codart); + rdoc.put(RDOC_CODARTMAG,codart); + rdoc.put(RDOC_CHECKED,'X'); + rdoc.put(RDOC_DESCR,anamag.get(ANAMAG_DESCR)); + rdoc.put(RDOC_UMQTA,rcont.get(LVRCONDV_UM).as_string()); + rdoc.put(RDOC_CAUSMAG,rcont.get(LVRCONDV_CAUSLAV).as_string()); + + //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino + if (prinbo) + { + TString16 scontostr = ""; + TString16 prezzostr = ""; + real prezzo; + real sconto = rcont.get(LVRCONDV_SCONTPERC).as_real(); + scontostr << sconto; + //controllo da dove devo prendere il prezzo + if (tplis == 0) + prezzo = rcont.get(LVRCONDV_PREZZO).as_real(); + else + { + prezzo = anamag.get_real(ANAMAG_COSTSTD); + } + prezzostr << prezzo; + rdoc.put(RDOC_PREZZO,prezzo); + } + } + dmsk.doc2mask(false); + + FOR_EACH_MASK_FIELD(dmsk, i, f) + { + if (f->has_check()) + f->check(STARTING_CHECK); + if (f->is_edit()) + f->on_hit(); + } + } + return ok; +} + +void TGestione_bolle_msk::user_set_handler( int fieldid, int index) +{ + if (index == 4101) + set_field_handler(fieldid, lv_bolla_handler); + else + TDocumento_mask::user_set_handler(fieldid, index); +} + +// Definizione della classe dell'applicazione motore +class TGestione_bolle_app : public TMotore_application +{ + +protected: + virtual TMask* get_mask( int mode ); +public: + TGestione_bolle_app() {} +}; + +inline TGestione_bolle_app& gbapp() { return (TGestione_bolle_app &) main_app(); }; + +TMask* TGestione_bolle_app::get_mask( int mode ) +{ + if (mode == MODE_INS || mode == MODE_MOD) + { + TString4 tipodoc; + if (mode == MODE_MOD) + tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai) + else + tipodoc = TMotore_application::get_mask(MODE_QUERY)->get(F_TIPODOC); + if (_doc_masks.objptr(tipodoc) == NULL) + { + TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc); + _doc_masks.add(tipodoc, m); + const TTipo_documento& tdoc = m->doc().tipo(); + const TString_array& handlers = tdoc.handlers(); + FOR_EACH_ARRAY_ROW(handlers, i, row) + { + m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) ); + } + } + } + return TMotore_application::get_mask(mode); +} + +int lv0600( int argc, char* argv[]) +{ + TGestione_bolle_app a; + + a.run( argc, argv, TR("Documenti di Trasporto")); + return 0; +} \ No newline at end of file diff --git a/lv/lvbollac.src b/lv/lvbollac.src index 2ef5ff31a..508a112f3 100755 --- a/lv/lvbollac.src +++ b/lv/lvbollac.src @@ -5,7 +5,7 @@ [MAIN] // Descrizione a caratteri del documento -TYPE=Bolla di vendita +TYPE=Bolla Consegna Lavanderia // Dove sono le risorse per il documento // modifica CAMPICALC=TOTMER|TOTPRE|SPESE|SPESIMB|SPESTRA|SPESINC|BOLLI|IMPONIBILI|IMPOSTE|TOTDOC|SCONTOD|SCONTOT|OMAGGI|TOTPROVV diff --git a/lv/lvrcondv.h b/lv/lvrcondv.h index eb247758f..ae1a64a82 100755 --- a/lv/lvrcondv.h +++ b/lv/lvrcondv.h @@ -18,7 +18,7 @@ #define LVRCONDV_TIPOFORF "TIPOFORF" #define LVRCONDV_RITAUDTTMP "RITAUDTTMP" #define LVRCONDV_ARROT "ARROT" -#define LVRCONDV_CAUSMAG "CAUSMAG" +#define LVRCONDV_CAUSLAV "CAUSLAV" #define LVRCONDV_VALCONV "VALCONV" #define LVRCONDV_FORFPERCL "FORFPERCL" #define LVRCONDV_IMPFISART "IMPFISART"