Patch level : 10.0 patch 488

Files correlati     : lv3
Ricompilazione Demo : [ ]
Commento            :
Prima vesrione funzionante evasione buoni di prelievo


git-svn-id: svn://10.65.10.50/trunk@19538 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-10-28 15:25:33 +00:00
parent e18191514b
commit 0956622dec

View File

@ -9,6 +9,7 @@
#include "../mg/clifogiac.h"
#include "../ve/velib.h"
#include "clifo.h"
#include "lvcondv.h"
#include "lvrcondv.h"
#include "lvrconsplan.h"
@ -74,6 +75,7 @@ protected:
void sistema_quantita();
void sistema_pacchi();
void evadi_da_barcode();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -94,7 +96,14 @@ static int sort_by_qta_evasa(TSheet_field& sheet, int r1, int r2)
const int qta2 = row2.get_int(6);
int dif = qta1 - qta2;
if (dif == 0)
{
const TString& codart1 = row1.get(1);
const TString& codart2 = row2.get(1);
dif = codart1.compare(codart2);
}
return dif;
}
@ -105,14 +114,20 @@ static int sort_by_codart(TSheet_field& sheet, int r1, int r2)
TToken_string& row1 = sheet.row(r1);
TToken_string& row2 = sheet.row(r2);
/*const int qta1 = row1.get_int(6);
const int qta2 = row2.get_int(6);
const TString& codart1 = row1.get(1);
const TString& codart2 = row2.get(1);
int dif = qta1 - qta2;
int dif = codart1.compare(codart2);
if (dif == 0)
{
const int qta1 = row1.get_int(6);
const int qta2 = row2.get_int(6);
dif = qta2 - qta1;
}
return dif;*/
return 0;
return dif;
}
//SETTA_CAMPI_DATA: metodo che compila tutti i campi legati alla data
@ -138,7 +153,16 @@ void TEvasione_msk::setta_campi_data()
set(F_SETTIMANA, settimana);
}
else
warning_box(TR("Data non valida!"));
{
TString8 str = data.string();
if (str.empty())
{
reset(F_GIORNO);
reset(F_SETTIMANA);
}
else
warning_box(TR("Data non valida!"));
}
}
//SETTA_CAMPI_CLIENTE: metodo che compila tutti i campi legati al cliente
@ -176,6 +200,16 @@ void TEvasione_msk::setta_campi_cliente()
reset(F_DATAPRCO);
reset(F_CODITI);
}
if (get(F_RAGSOC).empty())
{
TToken_string key;
key.add('C');
key.add(codcf);
const TRectype& clifo = cache().get(LF_CLIFO, key);
set(F_RAGSOC, clifo.get(CLI_RAGSOC));
set(F_RICALT, clifo.get(CLI_RICALT));
}
}
else
{
@ -190,6 +224,8 @@ void TEvasione_msk::setta_campi_cliente()
}
else
{
reset(F_RICALT);
reset(F_RAGSOC);
reset(F_CODCONT);
reset(F_DATAPRCO);
reset(F_CODITI);
@ -202,9 +238,30 @@ void TEvasione_msk::carica_righe()
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
TBuono_prelievo doc(kdoc);
const TString4 stato = doc.get(DOC_STATO);
set(F_STATO, stato);
disable(F_STATO);
set(F_DATADOC, doc.get_date(DOC_DATADOC)); setta_campi_data();
set(F_CODCF, doc.get_long(DOC_CODCF)); setta_campi_cliente(); field(F_CODCF).set_dirty();
_buonori = doc;
TSheet_field sheet = sfield(F_RIGHE);
if(doc.rows() > 0)
{
enable(DLG_SELECT);
enable(DLG_PREVIEW);
if(stato == "1")
enable(DLG_ELABORA);
enable(DLG_SAVEREC);
enable(DLG_CANCEL);
show(F_RIGHE);
}
TSheet_field& sheet = sfield(F_RIGHE);
sheet.row(-1);
//preparo l'array delle posizioni dei campi nello sheet
_posizioni.aggiungi("evaso", sheet.cid2index(S_EVASO));
@ -227,19 +284,17 @@ void TEvasione_msk::carica_righe()
TBuono_prelievo_row rdoc(row);
TToken_string& riga = sheet.row(-1);
riga.add(rdoc.evaso(), _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart());
//recupero i dati di interesse dall'anagrafica di magazzino
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
if (ppconf > 0)
riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi"));
else
@ -253,13 +308,14 @@ void TEvasione_msk::carica_righe()
riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon"));
riga.add(rdoc.rifbrit(), _posizioni.posizione("rifbrit"));
}
sheet.sort(sort_by_codart);
sheet.force_update();
}
//RIORDINA_RIGHE: metodo che riordina le righe dello sheet in base alle quota di evasione
void TEvasione_msk::riordina_righe()
{
TSheet_field sheet = sfield(F_RIGHE);
TSheet_field& sheet = sfield(F_RIGHE);
sheet.sort(sort_by_qta_evasa);
sheet.force_update();
}
@ -283,7 +339,7 @@ void TEvasione_msk::genera_documento()
//dati documento da generare
TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
char stato = cache().get("%TIP", tipodoc, "S2").left(1)[0];
char stato = cache().get("%TIP", tipodoc, "S2").left(1)[0];
const TDate databpre = bpre.datadoc();
const TDate datagen(TODAY);
@ -351,7 +407,7 @@ void TEvasione_msk::genera_documento()
long dottmp = magcli.get_long(CLIFOGIAC_DOTTM);
long dotod = magcli.get_long(CLIFOGIAC_DOTOD);
TRiga_documento rdoc = doc.new_row("21");
TRiga_documento& rdoc = doc.new_row("21");
rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_CODARTMAG,codart);
rdoc.put(RDOC_CHECKED,'X');
@ -395,7 +451,7 @@ void TEvasione_msk::genera_documento()
prezzo = anamag.get_real(ANAMAG_COSTSTD);
rdoc.put(RDOC_PREZZO, prezzo);
rdoc.put(RDOC_SCONTO,rcont.get(LVRCONDV_SCONTPERC)); //sconto
rdoc.put(RDOC_SCONTO, rcont.get(LVRCONDV_SCONTPERC)); //sconto
}
//scrivo il magazzino
@ -417,8 +473,10 @@ void TEvasione_msk::genera_documento()
if (doc.rows() > 0)
{
doc.write();
//bpre.set_stato("evaso");
const TString4 stato = cache().get("%TIP", ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_PRE", NULL, 0), "S2").mid(1,1);
bpre.put(DOC_STATO, stato);
bpre.write();
set(F_STATO, stato);
}
}
@ -426,7 +484,7 @@ void TEvasione_msk::genera_documento()
void TEvasione_msk::evadi_tutto()
{
const int posevaso = _posizioni.posizione("evaso");
TSheet_field sheet = sfield(F_RIGHE);
TSheet_field& sheet = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(sheet, r, riga)
{
@ -438,26 +496,28 @@ void TEvasione_msk::evadi_tutto()
//SPEZZA_RIGA: metodo che spezza una riga del buono in due righe, una per la quota evasa e una per la quota da evadere
void TEvasione_msk::spezza_riga()
{
TDoc_key kdoc(get_int(F_ANNO), get(F_CODNUM), get_long(F_NDOC));
TBuono_prelievo bpre(kdoc);
TSheet_field& sheet = sfield(F_RIGHE);
for(int riga = 1; riga <= bpre.rows(); riga++)
FOR_EACH_SHEET_ROW_BACK(sheet, r, riga1)
{
TRiga_documento& row = bpre[riga];
TBuono_prelievo_row rbpre1(row);
char flgev = riga1->get_char(_posizioni.posizione("evaso"));
if (flgev != 'X')
{
TToken_string& riga2 = sheet.row(-1);
riga2 = *riga1;
if (rbpre1.evaso())
continue;
const int dacons2 = riga2.get_int(_posizioni.posizione("ritirato")) - riga2.get_int(_posizioni.posizione("consegnato"));
riga2.add(dacons2, _posizioni.posizione("dacons"));
riga2.add(0L, _posizioni.posizione("consegnato"));
riga2.add(0L, _posizioni.posizione("pacchi"));
TRiga_documento rdoc(row);
TBuono_prelievo_row rbpre2(rdoc);
rbpre2.set_qta_dacons(rbpre2.qta_ritirata() - rbpre2.qta_consegnata());
rbpre2.set_qta_consegnata(0);
rbpre1.set_qta_dacons(rbpre1.qta_ritirata() - rbpre1.qta_consegnata());
rbpre1.set_evaso(true);
}
const int dacons1 = riga1->get_int(_posizioni.posizione("ritirato")) - riga1->get_int(_posizioni.posizione("consegnato"));
riga1->add(dacons1, _posizioni.posizione("dacons"));
riga1->add("X", _posizioni.posizione("evaso"));
}
}
sheet.sort(sort_by_codart);
sheet.force_update();
}
//SALVA: metodo che salva il buono di prelievo così com'è, senza compiere altre operazioni
@ -469,7 +529,7 @@ void TEvasione_msk::salva()
//nel caso avessi spezzato le righe, riscirvendole da capo mi vengono ordinate per codice
doc.destroy_rows();
TSheet_field sheet = sfield(F_RIGHE);
TSheet_field& sheet = sfield(F_RIGHE);
//riordino lo sheet
sheet.sort(sort_by_codart);
sheet.force_update();
@ -477,10 +537,17 @@ void TEvasione_msk::salva()
//per ogni riga dello sheet genero una riga documento
FOR_EACH_SHEET_ROW(sheet, r, riga)
{
TRiga_documento& row = doc.new_row();
TRiga_documento& row = doc.new_row("21");
TBuono_prelievo_row rdoc(row);
rdoc.set_evaso(riga->get(_posizioni.posizione("evaso")) == "X" ? true: false);
const char flgev = riga->get(_posizioni.posizione("evaso"))[0];
bool flag;
if (flgev == 'X')
flag = true;
else
flag = false;
rdoc.set_evaso(flag);
rdoc.set_codart(riga->get(_posizioni.posizione("codart")));
rdoc.set_desart(riga->get(_posizioni.posizione("artdescr")));
rdoc.set_causale(riga->get(_posizioni.posizione("causale")));
@ -503,7 +570,7 @@ void TEvasione_msk::annulla_operazioni()
//ANNULLA PACCHI
//elimino lo sheet senza salvarlo
TSheet_field sheet = sfield(F_RIGHE);
TSheet_field& sheet = sfield(F_RIGHE);
sheet.destroy();
for(int i = 1; i <= _buonori.rows(); i++)
@ -512,14 +579,25 @@ void TEvasione_msk::annulla_operazioni()
TBuono_prelievo_row rdoc(row);
TToken_string& riga = sheet.row(-1);
riga.add(rdoc.evaso(), _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi"));
riga.add(rdoc.evaso() ? "X" : "", _posizioni.posizione("evaso"));
riga.add(rdoc.codart(), _posizioni.posizione("codart"));
riga.add(rdoc.desart(), _posizioni.posizione("artdescr"));
riga.add(rdoc.causale(), _posizioni.posizione("causale"));
riga.add(rdoc.qta_ritirata(), _posizioni.posizione("ritirato"));
riga.add(rdoc.qta_dacons(), _posizioni.posizione("dacons"));
riga.add(rdoc.qta_consegnata(), _posizioni.posizione("consegnato"));
const TRectype& anamag = cache().get(LF_ANAMAG, rdoc.codart());
//recupero i dati di interesse dall'anagrafica di magazzino
const long ppconf = anamag.get_long(ANAMAG_PPCONF);
if (ppconf > 0)
riga.add(rdoc.num_pacchi(), _posizioni.posizione("pacchi"));
else
{
riga.add(0, _posizioni.posizione("pacchi"));
sheet.disable_cell(i, _posizioni.posizione("pacchi"));
}
riga.add(rdoc.cong_pre(), _posizioni.posizione("congpre"));
riga.add(rdoc.cong_att(), _posizioni.posizione("congatt"));
riga.add(rdoc.rifbcon(), _posizioni.posizione("rifbcon"));
@ -531,13 +609,14 @@ void TEvasione_msk::annulla_operazioni()
//CONTROLLA: metodo che controlla se tutte le righe sono evase
bool TEvasione_msk::controlla()
{
TSheet_field sheet = sfield(F_RIGHE);
TSheet_field& sheet = sfield(F_RIGHE);
bool evaso = true;
FOR_EACH_SHEET_ROW(sheet, r, row)
{
if (row->get(_posizioni.posizione("evaso")) != "X")
const char flgev = row->get(_posizioni.posizione("evaso"))[0];
if (flgev != 'X')
evaso = false;
}
return evaso;
@ -548,7 +627,8 @@ bool TEvasione_msk::controlla()
//a mano ed è prevista una evasione a pacchi, allora aggiorno il numero dei pacchi
void TEvasione_msk::sistema_quantita()
{
TString80 codart = get(S_CODART);
TMask& msk = sfield(F_RIGHE).sheet_mask();
TString80 codart = msk.get(S_CODART);
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
//recupero i dati di interesse dall'anagrafica di magazzino
@ -556,20 +636,17 @@ void TEvasione_msk::sistema_quantita()
if (ppconf > 0)
{
TSheet_field sheet = sfield(F_RIGHE);
TToken_string riga = sheet.row(sheet.selected());
int pacchi = get_int(S_PACCHI);
int pacchi = msk.get_int(S_PACCHI);
int qta_consegnata = pacchi * ppconf;
riga.add(qta_consegnata, _posizioni.posizione("consegnato"));
sheet.force_update(sheet.selected());
msk.set(S_CONSEGNATO, qta_consegnata);
}
}
void TEvasione_msk::sistema_pacchi()
{
TString80 codart = get(S_CODART);
TMask& msk = sfield(F_RIGHE).sheet_mask();
TString80 codart = msk.get(S_CODART);
const TRectype& anamag = cache().get(LF_ANAMAG,codart);
//recupero i dati di interesse dall'anagrafica di magazzino
@ -577,14 +654,10 @@ void TEvasione_msk::sistema_pacchi()
if (ppconf > 0)
{
TSheet_field sheet = sfield(F_RIGHE);
TToken_string riga = sheet.row(sheet.selected());
int qta_consegnata = get_int(S_CONSEGNATO);
int pacchi = qta_consegnata / ppconf + 1;
riga.add(pacchi, _posizioni.posizione("pacchi"));
sheet.force_update(sheet.selected());
int qta_consegnata = msk.get_int(S_CONSEGNATO);
int pacchi = qta_consegnata / ppconf;
msk.set(S_PACCHI, pacchi);
}
}
@ -636,24 +709,37 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
break;
case DLG_SAVEREC:
{
salva();
if (e == fe_button)
salva();
}
break;
case DLG_CANCEL:
{
annulla_operazioni();
if (e == fe_button)
{
annulla_operazioni();
return false;
}
}
break;
case F_NDOC:
{
if (e == fe_modify)
if (f.get_long() > 0)
{
enable(F_RIGHE);
carica_righe();
}
carica_righe();
else
disable(F_RIGHE);
{
sfield(F_RIGHE).destroy();
disable(DLG_SELECT);
disable(DLG_PREVIEW);
disable(DLG_ELABORA);
disable(DLG_SAVEREC);
disable(DLG_CANCEL);
reset(F_STATO);
reset(F_DATADOC); setta_campi_data();
reset(F_CODCF); setta_campi_cliente();
hide(F_RIGHE);
}
}
break;
case F_DATADOC:
@ -667,43 +753,20 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
if (e == fe_modify)
setta_campi_cliente();
}
break;
case F_RIGHE:
{
if (e == fe_modify)
{
TSheet_field sheet = sfield(F_RIGHE);
if (sheet.items() > 0)
{
enable(DLG_SELECT);
enable(DLG_PREVIEW);
enable(DLG_ELABORA);
enable(DLG_SAVEREC);
enable(DLG_CANCEL);
}
else
{
disable(DLG_SELECT);
disable(DLG_PREVIEW);
disable(DLG_ELABORA);
disable(DLG_SAVEREC);
disable(DLG_CANCEL);
}
}
}
break;
break;
case S_CONSEGNATO:
{
if (e == fe_modify)
{
TMask& msk = sfield(F_RIGHE).sheet_mask();
//la riga risulta evasa se la quantità consegnata è maggiore o uguale alla quantità da consegnare
if(f.get_long() > 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"));
set(S_EVASO, "X");
msk.set(S_EVASO, "X");
}
else if (f.get_long() == get_long(S_DACONS))
set(S_EVASO, "X");
else if (msk.get_long(S_CONSEGNATO) == msk.get_long(S_DACONS))
msk.set(S_EVASO, "X");
sistema_pacchi();
}
}
@ -711,9 +774,7 @@ bool TEvasione_msk::on_field_event(TOperable_field& f, TField_event e, long joll
case S_PACCHI:
{
if (e == fe_modify)
{
sistema_quantita();
}
}
break;
default:break;
@ -737,7 +798,7 @@ TEvasione_msk::TEvasione_msk():TAutomask("lv3200a")
int annoes = es.date2esc(data);
set(F_ANNO, annoes);
disable(F_RIGHE);
hide(F_RIGHE);
disable(DLG_SELECT);
disable(DLG_PREVIEW);
disable(DLG_ELABORA);
@ -769,6 +830,7 @@ public:
bool TEvasione_app::create()
{
_msk = new TEvasione_msk();
open_files(LF_DOC, LF_RIGHEDOC);
return TSkeleton_application::create();
}