Patch level : 10.0 patch 501
Files correlati : lv3 lvlib(->lv2) Ricompilazione Demo : [ ] Commento : Aggiunta la gestione dei codici pagamento e magazzino in testata documenti e IVA sulle righe Aggiunta gestione evasione dei buoni da barcode Corretto metodo read della classe TRiga_pacco git-svn-id: svn://10.65.10.50/trunk@19577 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
854e5f28de
commit
c675dcd8f6
238
lv/lv3200.cpp
238
lv/lv3200.cpp
@ -24,11 +24,15 @@
|
|||||||
//classe TEvasione_msk
|
//classe TEvasione_msk
|
||||||
class TEvasione_msk: public TAutomask
|
class TEvasione_msk: public TAutomask
|
||||||
{
|
{
|
||||||
TDocumento _buonori;
|
TDocumento _buonori;
|
||||||
|
|
||||||
int _ndoc;
|
int _ndoc;
|
||||||
|
int _autoselect;
|
||||||
|
|
||||||
TString4 _tpev;
|
TString4 _tpev;
|
||||||
int _righevase;
|
|
||||||
TAssoc_array _pacchi;
|
TAssoc_array _pacchi;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setta_campi_data();
|
void setta_campi_data();
|
||||||
@ -48,6 +52,7 @@ protected:
|
|||||||
|
|
||||||
void evadi_da_barcode();
|
void evadi_da_barcode();
|
||||||
|
|
||||||
|
virtual void on_idle();
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -205,8 +210,6 @@ void TEvasione_msk::setta_campi_cliente()
|
|||||||
//CARICA_RIGHE: metodo che carica sullo sheet le righe di un documento selezionato
|
//CARICA_RIGHE: metodo che carica sullo sheet le righe di un documento selezionato
|
||||||
void TEvasione_msk::carica_righe()
|
void TEvasione_msk::carica_righe()
|
||||||
{
|
{
|
||||||
_righevase = 0;
|
|
||||||
|
|
||||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
|
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
|
||||||
TBuono_prelievo doc(kdoc);
|
TBuono_prelievo doc(kdoc);
|
||||||
|
|
||||||
@ -245,9 +248,7 @@ void TEvasione_msk::carica_righe()
|
|||||||
if (rdoc.qta_dacons() > 0)
|
if (rdoc.qta_dacons() > 0)
|
||||||
{
|
{
|
||||||
TToken_string& riga = sheet.row(-1);
|
TToken_string& riga = sheet.row(-1);
|
||||||
riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO));
|
riga.add(rdoc.evaso() ? "X" : "", sheet.cid2index(S_EVASO));
|
||||||
if(rdoc.evaso())
|
|
||||||
_righevase++;
|
|
||||||
|
|
||||||
riga.add(rdoc.codart(), sheet.cid2index(S_CODART));
|
riga.add(rdoc.codart(), sheet.cid2index(S_CODART));
|
||||||
riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR));
|
riga.add(rdoc.desart(), sheet.cid2index(S_ARTDESCR));
|
||||||
@ -336,6 +337,15 @@ void TEvasione_msk::genera_documento()
|
|||||||
consegne.move_first();
|
consegne.move_first();
|
||||||
const TDate dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
|
const TDate dataprco = consegne.get(LVRCONSPLAN_DTCONS).as_date();
|
||||||
const int coditi = consegne.get(LVRCONSPLAN_CODITI).as_int();
|
const int coditi = consegne.get(LVRCONSPLAN_CODITI).as_int();
|
||||||
|
|
||||||
|
//recupero il codpag
|
||||||
|
TToken_string key;
|
||||||
|
key.add('C');
|
||||||
|
key.add(codcf);
|
||||||
|
const TString4 codpag = cache().get(LF_CLIFO, key, CLI_CODPAG);
|
||||||
|
|
||||||
|
//reupero la cuasale di magazzino di testata
|
||||||
|
const TString16 causmag = cache().get("%TIP", tipodoc, "S9");
|
||||||
|
|
||||||
//preparo la testata del documento
|
//preparo la testata del documento
|
||||||
TDocumento doc('D', kdoc.anno(), codnum, ++_ndoc);
|
TDocumento doc('D', kdoc.anno(), codnum, ++_ndoc);
|
||||||
@ -345,6 +355,8 @@ void TEvasione_msk::genera_documento()
|
|||||||
doc.put(DOC_TIPOCF, 'C');
|
doc.put(DOC_TIPOCF, 'C');
|
||||||
doc.put(DOC_CODCF, codcf);
|
doc.put(DOC_CODCF, codcf);
|
||||||
doc.put(DOC_CODCONT, codcont);
|
doc.put(DOC_CODCONT, codcont);
|
||||||
|
doc.put(DOC_CODPAG, codpag);
|
||||||
|
doc.put(DOC_CAUSMAG, causmag);
|
||||||
doc.put("DATAGEN", datagen); //data generazione del documento
|
doc.put("DATAGEN", datagen); //data generazione del documento
|
||||||
doc.put("DATAPRCO", dataprco); //data prevista consegna
|
doc.put("DATAPRCO", dataprco); //data prevista consegna
|
||||||
doc.put("CODITI", coditi); //codice itinerario
|
doc.put("CODITI", coditi); //codice itinerario
|
||||||
@ -525,6 +537,7 @@ void TEvasione_msk::salva()
|
|||||||
{
|
{
|
||||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
|
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
|
||||||
TBuono_prelievo doc(kdoc);
|
TBuono_prelievo doc(kdoc);
|
||||||
|
TDate datadoc = doc.get_date(DOC_DATADOC);
|
||||||
|
|
||||||
TLaundry_contract cont(get_long(F_CODCF), get_long(F_CODCONT));
|
TLaundry_contract cont(get_long(F_CODCF), get_long(F_CODCONT));
|
||||||
|
|
||||||
@ -605,6 +618,60 @@ void TEvasione_msk::salva()
|
|||||||
rdoc.set_magc(magazzinoc);
|
rdoc.set_magc(magazzinoc);
|
||||||
}
|
}
|
||||||
doc.rewrite();
|
doc.rewrite();
|
||||||
|
|
||||||
|
//se sto evadendo tramite barcode quando salvo salvo anche tutti i pacchi associati
|
||||||
|
//generando i movimenti di magazzino di scarico
|
||||||
|
if (_tpev == "B")
|
||||||
|
{
|
||||||
|
TLocalisamfile pacchi(LF_PACCHI);
|
||||||
|
TLocalisamfile movi(LF_MOVMAG);
|
||||||
|
|
||||||
|
//cerco l'ultimo numero di chiave in movmag
|
||||||
|
TISAM_recordset mov("USE MOVMAG");
|
||||||
|
long nummov = 0;
|
||||||
|
|
||||||
|
if(mov.move_last())
|
||||||
|
nummov += mov.get(MOVMAG_NUMREG).as_int();
|
||||||
|
|
||||||
|
const TCausale_magazzino causale((ini_get_string(CONFIG_DITTA, "lv", "CAUSCARMAG")));
|
||||||
|
TString8 magazzino;
|
||||||
|
magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGP");
|
||||||
|
|
||||||
|
TEsercizi_contabili es;
|
||||||
|
int annoes = es.date2esc(datadoc);
|
||||||
|
|
||||||
|
TMov_mag movmag(++nummov);
|
||||||
|
movmag.put(MOVMAG_ANNOES, annoes);
|
||||||
|
movmag.put(MOVMAG_DATAREG, datadoc);
|
||||||
|
movmag.put(MOVMAG_CODCAUS, causale.codice());
|
||||||
|
|
||||||
|
FOR_EACH_ASSOC_OBJECT(_pacchi, o, codpacco, rifdoc)
|
||||||
|
{
|
||||||
|
TDoc_key kdoc = *(TToken_string*)rifdoc;
|
||||||
|
|
||||||
|
TRiga_pacco rp(codpacco);
|
||||||
|
const TString80 codart = rp.articolo();
|
||||||
|
const long qta = rp.quantita().integer();
|
||||||
|
|
||||||
|
//recupero l'unità di misura principale di quest'articolo
|
||||||
|
TToken_string key;
|
||||||
|
key.add(codart);
|
||||||
|
key.add(1);
|
||||||
|
const TString4 um = cache().get(LF_UMART, key, UMART_UM);
|
||||||
|
|
||||||
|
rp.set_rigabolla(kdoc.anno(), kdoc.codnum(), kdoc.ndoc(), 0); //SOLUZIONE MOMENTANEA PER VEDERE SE FUNZIONA TUTTO
|
||||||
|
rp.rewrite(pacchi);
|
||||||
|
|
||||||
|
//faccio la nuova riga del movimento di magazzino
|
||||||
|
TRectype& rmovmag = movmag.new_row();
|
||||||
|
rmovmag.put(RMOVMAG_CODMAG, magazzino);
|
||||||
|
rmovmag.put(RMOVMAG_CODART, codart);
|
||||||
|
|
||||||
|
rmovmag.put(RMOVMAG_UM, um);
|
||||||
|
rmovmag.put(RMOVMAG_QUANT, qta);
|
||||||
|
}
|
||||||
|
movmag.write(movi);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//ANNULLA_OPERAZIONI: metodo elimina tutte le quantità scritte durante l'ultima evasione
|
//ANNULLA_OPERAZIONI: metodo elimina tutte le quantità scritte durante l'ultima evasione
|
||||||
@ -612,6 +679,7 @@ void TEvasione_msk::salva()
|
|||||||
void TEvasione_msk::annulla_operazioni()
|
void TEvasione_msk::annulla_operazioni()
|
||||||
{
|
{
|
||||||
//ANNULLA PACCHI
|
//ANNULLA PACCHI
|
||||||
|
_pacchi.destroy();
|
||||||
|
|
||||||
//elimino lo sheet senza salvarlo
|
//elimino lo sheet senza salvarlo
|
||||||
TSheet_field& sheet = sfield(F_RIGHE);
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
@ -716,63 +784,108 @@ void TEvasione_msk::evadi_da_barcode()
|
|||||||
|
|
||||||
if (codpacco.full())
|
if (codpacco.full())
|
||||||
{
|
{
|
||||||
|
const TRiga_pacco rp(codpacco);
|
||||||
|
const TString80 codart = rp.articolo();
|
||||||
|
const long qtapacco = rp.quantita().integer();
|
||||||
|
|
||||||
TSheet_field& sheet = sfield(F_RIGHE);
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
|
||||||
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_int(F_NDOC));
|
const int pospa = sheet.cid2index(S_PACCHI);
|
||||||
|
const int posco = sheet.cid2index(S_CONSEGNATO);
|
||||||
|
|
||||||
TRiga_pacco rp(codpacco);
|
//se il pacco è già stato pistolettato lo tolgo dai pacchi da evadere, altrimenti cerco di sommarlo
|
||||||
TString80 codart = rp.articolo();
|
//a una riga documento esistente
|
||||||
int qtapacco = rp.quantita().integer();
|
if (_pacchi.is_key(codpacco))
|
||||||
|
|
||||||
bool trovato = false;
|
|
||||||
|
|
||||||
//cerco la prima riga non evasa di quell'articolo
|
|
||||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
|
||||||
{
|
{
|
||||||
if (riga->get(sheet.cid2index(S_CODART)) == codart && riga->get(sheet.cid2index(S_EVASO)) != "X")
|
_pacchi.remove(codpacco);
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||||
{
|
{
|
||||||
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
|
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||||
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
|
const char sevaso = riga->get_char(sheet.cid2index(S_EVASO));
|
||||||
|
|
||||||
riga->add(pacchi, sheet.cid2index(S_PACCHI));
|
if (scodart == codart)
|
||||||
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
|
|
||||||
|
|
||||||
trovato = true;
|
|
||||||
|
|
||||||
if (_pacchi.is_key(codpacco))
|
|
||||||
_pacchi.remove(codpacco);
|
|
||||||
else
|
|
||||||
_pacchi.add(codpacco, kdoc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!trovato)
|
|
||||||
{
|
|
||||||
if(yesno_box(TR("Si desidera provare a sommare il pacco a una riga già evasa?")))
|
|
||||||
{
|
|
||||||
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
|
||||||
{
|
{
|
||||||
if (riga->get(sheet.cid2index(S_CODART)) == codart)
|
int qtadacon = riga->get_int(sheet.cid2index(S_DACONS));
|
||||||
{
|
int pacchi = riga->get_int(pospa); pacchi -= 1;
|
||||||
int pacchi = riga->get_int(sheet.cid2index(S_PACCHI)); pacchi += 1;
|
int qtacon = riga->get_int(posco); qtacon -= qtapacco;
|
||||||
int qtacon = riga->get_int(sheet.cid2index(S_CONSEGNATO)); qtacon += qtapacco;
|
|
||||||
|
|
||||||
riga->add(pacchi, sheet.cid2index(S_PACCHI));
|
riga->add(pacchi, pospa);
|
||||||
riga->add(qtacon, sheet.cid2index(S_CONSEGNATO));
|
riga->add(qtacon, posco);
|
||||||
|
|
||||||
trovato = true;
|
if(qtacon <= qtadacon && sevaso == 'X')
|
||||||
if (_pacchi.is_key(codpacco))
|
riga->add("", sheet.cid2index(S_EVASO));
|
||||||
_pacchi.remove(codpacco);
|
|
||||||
else
|
|
||||||
_pacchi.add(codpacco, kdoc);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_int(F_NDOC));
|
||||||
|
|
||||||
if (!trovato)
|
bool trovato = false;
|
||||||
warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono"));
|
//cerco la prima riga non evasa di quell'articolo
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||||
|
{
|
||||||
|
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||||
|
const char sevaso = riga->get_char(sheet.cid2index(S_EVASO));
|
||||||
|
if (scodart == codart && sevaso != 'X')
|
||||||
|
{
|
||||||
|
int qtadacon = riga->get_int(sheet.cid2index(S_DACONS));
|
||||||
|
int pacchi = riga->get_int(pospa); pacchi += 1;
|
||||||
|
int qtacon = riga->get_int(posco); qtacon += qtapacco;
|
||||||
|
|
||||||
|
riga->add(pacchi, pospa);
|
||||||
|
riga->add(qtacon, posco);
|
||||||
|
|
||||||
|
if (qtacon > qtadacon)
|
||||||
|
{
|
||||||
|
warning_box(TR("ATTENZIONE: si sta consegnando un quantitativo maggiore al dovuto"));
|
||||||
|
riga->add('X', sheet.cid2index(S_EVASO));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qtacon == qtadacon)
|
||||||
|
riga->add('X', sheet.cid2index(S_EVASO));
|
||||||
|
|
||||||
|
trovato = true;
|
||||||
|
_pacchi.add(codpacco, kdoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trovato)
|
||||||
|
{
|
||||||
|
if(yesno_box(TR("Si desidera provare a sommare il pacco a una riga già evasa?")))
|
||||||
|
{
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, r, riga)
|
||||||
|
{
|
||||||
|
const TString80 scodart = riga->get(sheet.cid2index(S_CODART));
|
||||||
|
if (scodart == codart)
|
||||||
|
{
|
||||||
|
int pacchi = riga->get_int(pospa); pacchi += 1;
|
||||||
|
int qtacon = riga->get_int(posco); qtacon += qtapacco;
|
||||||
|
|
||||||
|
riga->add(pacchi, pospa);
|
||||||
|
riga->add(qtacon, posco);
|
||||||
|
|
||||||
|
trovato = true;
|
||||||
|
_pacchi.add(codpacco, kdoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trovato)
|
||||||
|
warning_box(TR("Non è stato possibile sommare il pacco a nessuna riga del buono"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TEvasione_msk:: on_idle()
|
||||||
|
{
|
||||||
|
TMask::on_idle();
|
||||||
|
if (_autoselect >= 0 && get(F_BARCODE).full())
|
||||||
|
{
|
||||||
|
reset(F_BARCODE);
|
||||||
|
field(F_BARCODE).set_focus();
|
||||||
|
_autoselect = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,7 +975,20 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
|
|||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
setta_campi_cliente();
|
setta_campi_cliente();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case F_BARCODE:
|
||||||
|
{
|
||||||
|
if (e == fe_modify && f.get().full())
|
||||||
|
{
|
||||||
|
_autoselect = 1;
|
||||||
|
evadi_da_barcode();
|
||||||
|
sfield(F_RIGHE).force_update();
|
||||||
|
|
||||||
|
if (controlla())
|
||||||
|
send_key(K_SPACE, DLG_ELABORA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case S_CONSEGNATO:
|
case S_CONSEGNATO:
|
||||||
{
|
{
|
||||||
if (e == fe_modify)
|
if (e == fe_modify)
|
||||||
@ -872,7 +998,7 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
|
|||||||
//la riga risulta evasa se la quantità consegnata è maggiore o uguale alla quantità da consegnare
|
//la riga risulta evasa se la quantità consegnata è maggiore o uguale alla quantità da consegnare
|
||||||
if(msk.get_long(S_CONSEGNATO) > msk.get_long(S_DACONS))
|
if(msk.get_long(S_CONSEGNATO) > msk.get_long(S_DACONS))
|
||||||
{
|
{
|
||||||
warning_box(TR("ATTENZIONE: stai consegnando un quantitativo maggiore al dovuto"));
|
warning_box(TR("ATTENZIONE: si sta consegnando un quantitativo maggiore al dovuto"));
|
||||||
msk.set(S_EVASO, "X");
|
msk.set(S_EVASO, "X");
|
||||||
TToken_string& riga = sheet.row(sheet.selected());
|
TToken_string& riga = sheet.row(sheet.selected());
|
||||||
riga.add("X", sheet.cid2index(S_EVASO));
|
riga.add("X", sheet.cid2index(S_EVASO));
|
||||||
@ -921,9 +1047,15 @@ TEvasione_msk::TEvasione_msk():TAutomask("lv3200a")
|
|||||||
_tpev = main_app().argv(2);
|
_tpev = main_app().argv(2);
|
||||||
|
|
||||||
if (_tpev == "B")
|
if (_tpev == "B")
|
||||||
|
{
|
||||||
|
_autoselect = 1;
|
||||||
show(F_BARCODE);
|
show(F_BARCODE);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
_autoselect = -1;
|
||||||
hide(F_BARCODE);
|
hide(F_BARCODE);
|
||||||
|
}
|
||||||
|
|
||||||
hide(F_RIGHE);
|
hide(F_RIGHE);
|
||||||
disable(DLG_SELECT);
|
disable(DLG_SELECT);
|
||||||
|
@ -1066,8 +1066,11 @@ bool TRiga_pacco::read(const TString& codpacco, const long codriga)
|
|||||||
{
|
{
|
||||||
if (codpacco.full()) // Campo obbligatorio!
|
if (codpacco.full()) // Campo obbligatorio!
|
||||||
{
|
{
|
||||||
TString80 key; key.format("%s|%ld", codpacco, codriga);
|
TLocalisamfile pacchi(LF_PACCHI);
|
||||||
*((TRectype*)this) = cache().get(LF_PACCHI, key);
|
put(PACCHI_CODPACCO, codpacco);
|
||||||
|
put(PACCHI_CODRIGA, codriga);
|
||||||
|
|
||||||
|
TRectype::read(pacchi);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
zero();
|
zero();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user