#include "form.h" #include "mglib.h" void TForm_stampemg::add_giaclev(TString &levname) { int lv=1; do { const TString & piece = _giaclev->unpack_grpcode(relation()->lfile(LF_MAG).get("LIVELLO"),lv); if (piece.not_empty()) { levname << '/' << piece ; } } while (++lv< (_tolivgiac ? _tolivgiac: _giaclev->last_level()) ); } void TForm_stampemg::gruppogiac(TForm_item &cf, TToken_string &s) { TString valore,levname; int livello=atoi(s.get()); if (_fromlivgiac) { levname=relation()->lfile(LF_MAG).get("CODART"); if (_fromlivgiac>1) { add_giaclev(levname); } } levname << ' ' << _giaclev->name(livello) ; valore=_giaclev->group_descr(relation()->lfile(LF_MAG).get("LIVELLO"),livello); if (valore.empty()) valore=UNKNOWN_NAME; cf.set(levname << ' ' << valore); } void TForm_stampemg::gruppoart(TForm_item &cf, TToken_string &s) { int lv=atoi(s.get()); TString valore; valore=_artlev->group_descr(relation()->lfile(LF_ANAMAG).get("CODART"),lv); if (valore.not_empty()) cf.set(valore); else cf.set(UNKNOWN_NAME); } bool TForm_stampemg::validate(TForm_item &cf, TToken_string &s) { const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio TString subcode; TString valore,levname; if (code=="_USER") { subcode=s.get(); if (subcode=="GRUPPOGIAC") { /* int lv=atoi(s.get()); do { valore=_giaclev->build_tabcode(relation()->lfile(LF_MAG).get("LIVELLO"),lv); } while (--lv>0 && valore==""); if (valore!="") levname=_giaclev->name(lv+1) ; else levname="giacenza"; cf.set(levname << ' ' << _giacgrp->decode(valore)); */ gruppogiac(cf,s); } if (subcode=="GRUPPOART") { /* int lv=atoi(s.get()); do { valore=_artlev->build_tabcode(relation()->lfile(LF_ANAMAG).get("CODART"),lv); } while (--lv>0 && valore==""); cf.set(_artgrp->decode(valore)); */ gruppoart(cf,s); } if (subcode=="CODGRUPPOART") { int lv=atoi(s.get()); do { valore=relation()->lfile(LF_ANAMAG).get("CODART"); valore.rpad(25).cut(_artlev->packed_length(lv)); } while (--lv>0 && valore==""); cf.set(valore); } if (subcode=="CATMER") { valore=relation()->lfile(_sottocatmer ? -401 : -400).get("S0"); cf.set(valore); } if (subcode=="CODCATMER") { valore=relation()->lfile(LF_ANAMAG).get("GRMERC"); valore.rpad(5).cut(_sottocatmer ? 5:3); cf.set(valore); } if (subcode=="LIVELLIGIAC") { int lv=_tolivgiac; valore=""; do { const TString & piece = _giaclev->unpack_grpcode(relation()->lfile(LF_MAG).get("LIVELLO"),lv+1); if (piece.not_empty()) { if (valore.not_empty()) valore << '/'; valore << piece ; } } while (lv++<_giaclev->last_level()); if (valore!="") levname=_giaclev->name(_tolivgiac+1); else levname="Giacenza"; cf.set(levname << ' ' << valore); } return TRUE; } else return TForm::validate(cf, s); } void TForm_stampemg::setcatmer(bool catmer,bool sottoc) { TForm_subsection &s=((TForm_subsection &)find_field('B',odd_page,"GRUPPI_CATMER")); TString cond("GRMERC"); if (catmer) cond << "[1," << (sottoc ? 5 : 3) <<']'; else cond ="CODART[1,1]"; s.setcondition(cond,_strexpr); _sottocatmer=sottoc; } bool TForm_stampemg::setdett_perart(int fromlivart,int livart,int fromlivgiac,int livgiac,bool showmag, bool showdep) { find_field('B',odd_page,"H_MAGAZZINO").show(showmag && showdep); find_field('B',odd_page,"TOT_MAGAZZINO").show(showmag); find_field('B',odd_page,"H_DEPOSITO").show(FALSE); find_field('B',odd_page,"TOT_DEPOSITO").show(showdep); return setdettaglio(TRUE,fromlivart,livart,fromlivgiac,livgiac,showmag||showdep); } bool TForm_stampemg::setdett_permag(int fromlivart,int livart,int fromlivgiac,int livgiac,bool showmag, bool showdep,bool showdett) { find_field('B',odd_page,"H_MAGAZZINO").show(showmag && (showdep) ); find_field('B',odd_page,"TOT_MAGAZZINO").show(showmag); find_field('B',odd_page,"H_DEPOSITO").show(showdep && showdett); find_field('B',odd_page,"TOT_DEPOSITO").show(showdep); return setdettaglio(showdett,fromlivart,livart,fromlivgiac,livgiac,FALSE); } bool TForm_stampemg::setdettaglio(bool show, int fromlivart,int livart,int fromlivgiac,int livgiac,bool dettgiac) { _fromlivart=fromlivart; _fromlivgiac=fromlivgiac; _tolivart=livart; _tolivgiac=livgiac; // *********** int i, tolivart,tolivgiac; // abilita le sezioni dei livelli di codice TForm_subsection &s1=(TForm_subsection &)find_field('B',odd_page,"H_ARTICOLO"); TForm_subsection &s2=(TForm_subsection &)find_field('B',odd_page,"TOT_ARTICOLO"); if (fromlivgiac==0 && (livart==0 ||livart==_artlev->last_level())) { s1.show(show && livart<_artlev->last_level() || dettgiac); s2.show(show); } else { s1.hide(); s2.hide(); } tolivart =min(( livart ? livart :_artlev->last_level()),_artlev->last_level()-1) ; tolivgiac=livgiac ? livgiac :_giaclev->last_level(); for (i=1; i<=FORM_MAXARTLEV; i++) { TString sname("TOT_GART"); sname << i; TForm_subsection &s1=(TForm_subsection &)find_field('B',odd_page,sname); s1.show(show && i>=fromlivart && i<=tolivart && fromlivgiac==0); sname="H_GCODART"; sname << i; TForm_subsection &s2=(TForm_subsection &)find_field('B',odd_page,sname); s2.show(show && i>=fromlivart && (itolivart || livgiac || dettgiac))) && fromlivgiac==0); } // abilita le sezioni del codice livelli giacenza for (i=1; i<=FORM_MAXGIACLEV; i++) { TString sname("TOT_GLIVGIAC"); sname << i; TForm_subsection &s1=(TForm_subsection &)find_field('B',odd_page,sname); s1.show(show && i>=fromlivgiac && (i<=tolivgiac) && livart==0); sname="H_GLIVGIAC"; sname << i; TForm_subsection &s2=(TForm_subsection &)find_field('B',odd_page,sname); s2.show(show && i>=fromlivgiac && (ipacked_length(i) <<']'; s.setcondition(cond,_strexpr); } // sezioni livello codice for (i=fromlivart;i<=tolivart ; i++) { TString sname("GRUPPI_CODART"); sname << i; TForm_subsection &s=(TForm_subsection &)find_field('B',odd_page,sname); TString cond(s.condition()); cond << '[' << (i==1 ? 1:_artlev->packed_length(i-1))<<',' << _artlev->packed_length(i) <<']'; s.setcondition(cond,_strexpr); } return TRUE; } TForm_stampemg::TForm_stampemg(const char *name,const char *code) : TForm(name,code) { _giaclev= new TCodgiac_livelli(); _artlev= new TCodart_livelli(); _fromlivgiac=_tolivgiac=0; _fromlivart=_tolivart=0; } TForm_stampemg::~TForm_stampemg() { delete _giaclev; delete _artlev; }