Correzioni varie su lavanderie:

Aggiunto nuovo tipo di fatturazione con importo totale minimo
Aggiunto flag per non riportare le note da bolla a fattura
Aggiunte colonne di dotazione a buoni di ritiro
Aggiunta nuova proposta causale di consegna su nuovo documento

git-svn-id: svn://10.65.10.50/branches/R_10_00@22806 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-02-14 10:19:59 +00:00
parent 6cac0698e0
commit 82b76f399a
13 changed files with 189 additions and 102 deletions

View File

@ -96,6 +96,7 @@
#define F_AGGHEAD 275 #define F_AGGHEAD 275
#define F_DESTHEAD 276 #define F_DESTHEAD 276
#define F_ZERONOTE 277
#define F_BACKUP 300 #define F_BACKUP 300

View File

@ -179,10 +179,16 @@ END
BOOLEAN F_RIFTEST BOOLEAN F_RIFTEST
BEGIN BEGIN
PROMPT 2 6 "Scrivi riferimenti in testata documento" PROMPT 2 6 "Riportare riferimenti in testata documento"
FIELD RifTest FIELD RifTest
END END
BOOLEAN F_ZERONOTE
BEGIN
PROMPT 42 6 "Non riportare note da bolle a fatture"
FIELD ZeroNote
END
STRING F_FELAB_DIF 8 STRING F_FELAB_DIF 8
BEGIN BEGIN
PROMPT 2 7 "Tipo fatt. definitiva" PROMPT 2 7 "Tipo fatt. definitiva"

View File

@ -1,6 +1,5 @@
#include <automask.h> #include <automask.h>
#include <colmask.h> #include <colmask.h>
#include <defmask.h>
#include <execp.h> #include <execp.h>
#include <progind.h> #include <progind.h>
#include <relapp.h> #include <relapp.h>
@ -695,8 +694,6 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
} }
} }
//se ho scritto un articolo diverso da quello che esisteva prima //se ho scritto un articolo diverso da quello che esisteva prima
//e se si desidera veramente modificarlo, allora permetto la modifica //e se si desidera veramente modificarlo, allora permetto la modifica
//e forzo l'updatre della riga, altrimenti riscrivo l'articolo che c'era prima //e forzo l'updatre della riga, altrimenti riscrivo l'articolo che c'era prima
@ -1106,8 +1103,8 @@ bool TContratti_app:: user_create()
_codart = ""; _codart = "";
const TDate oggi(TODAY); const TDate oggi(TODAY);
if (esercizi().date2esc(oggi) == 0) if (esercizi().date2esc(oggi) <= 0)
return error_box("Attenzione non esiste l'esercizio corrispondente al %s", oggi.string()); error_box("Non esiste l'esercizio corrispondente al %s", oggi.string());
_rel=new TRelation (LF_LVCONDV); _rel=new TRelation (LF_LVCONDV);
_msk= new TContratti_msk; _msk= new TContratti_msk;

View File

@ -429,6 +429,8 @@ BEGIN
MESSAGE DISABLE,F_RAGART|ENABLE,F_IMPFIX|SHOW,F_CANFIX|HIDE,F_NOLCICTE MESSAGE DISABLE,F_RAGART|ENABLE,F_IMPFIX|SHOW,F_CANFIX|HIDE,F_NOLCICTE
ITEM "2|% sul val. conv. per cli." ITEM "2|% sul val. conv. per cli."
MESSAGE DISABLE,F_RAGART|DISABLE,F_IMPFIX|HIDE,F_CANFIX|SHOW,F_NOLCICTE MESSAGE DISABLE,F_RAGART|DISABLE,F_IMPFIX|HIDE,F_CANFIX|SHOW,F_NOLCICTE
ITEM "3|Importo minimo"
MESSAGE DISABLE,F_RAGART|ENABLE,F_IMPFIX|SHOW,F_CANFIX|HIDE,F_NOLCICTE
FIELD TIPOCAN FIELD TIPOCAN
END END

View File

@ -102,7 +102,7 @@ TObject* TCalc_02_data::dup() const
//////////////////////////////////////// ////////////////////////////////////////
//Classe TFatturazione_lavanderie //Classe TFatturazione_lavanderie
class TFatturazione_lavanderie:public TFatturazione_bolle class TFatturazione_lavanderie : public TFatturazione_bolle
{ {
TDate _data_elab; TDate _data_elab;
TToken_string _campi_raggruppamento; TToken_string _campi_raggruppamento;
@ -509,6 +509,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
{ {
const bool use_indsp = ini_get_bool(CONFIG_DITTA, "mg", "MOV_INDSPED"); const bool use_indsp = ini_get_bool(CONFIG_DITTA, "mg", "MOV_INDSPED");
const bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest"); const bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest");
const bool zero_note = ini_get_bool(CONFIG_DITTA, "lv", "ZeroNote");
//scorro tutti i documenti di output generati precedentemente //scorro tutti i documenti di output generati precedentemente
for (int id = 0; id < doc_out.items(); id++) for (int id = 0; id < doc_out.items(); id++)
@ -560,6 +561,9 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
doc.destroy_row(1, true); doc.destroy_row(1, true);
} }
if (zero_note)
doc.zero(DOC_NOTE);
//se devo mettere i riferimenti della bolla in testata, prendo la descrizione della prima riga //se devo mettere i riferimenti della bolla in testata, prendo la descrizione della prima riga
//e la metto sulla testata del documento, poi cancello la prima riga del documento //e la metto sulla testata del documento, poi cancello la prima riga del documento
if (rifbol && riftest) if (rifbol && riftest)
@ -740,8 +744,8 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
const TRectype& rcont = contr.row(codart); const TRectype& rcont = contr.row(codart);
const TString4 tipodot = rcont.get(LVRCONDV_NOLCIC); const TString4 tipodot = rcont.get(LVRCONDV_NOLCIC);
const TString4 artcli = rcont.get(LVRCONDV_VCARTCLI); const TString4 artcli = rcont.get(LVRCONDV_VCARTCLI);
real dot;
const int annoes = _data_elab.year(); const int annoes = _data_elab.year();
real dot;
//instanzio il TArticolo_lavanderia //instanzio il TArticolo_lavanderia
//cerco la giacenza per articolo dell'articolo esaminato //cerco la giacenza per articolo dell'articolo esaminato
@ -809,7 +813,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
warning_box(TR("Manca l'unità di misura di riferimento")); warning_box(TR("Manca l'unità di misura di riferimento"));
break; break;
} }
if(umrif != umkg) if (umrif != umkg)
{ {
warning_box(TR("L'unità di misura di riferimento non è quella dei Kg")); warning_box(TR("L'unità di misura di riferimento non è quella dei Kg"));
break; break;
@ -817,7 +821,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
//leggo e controllo il fattore di conversione //leggo e controllo il fattore di conversione
fatconv = unita.get_real("R10"); fatconv = unita.get_real("R10");
if(fatconv == ZERO) if (fatconv.is_zero())
{ {
warning_box(TR("Manca il fattore di conversione")); warning_box(TR("Manca il fattore di conversione"));
break; break;
@ -934,13 +938,13 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
if (tipovalconv == 'A') if (tipovalconv == 'A')
{ {
//leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule //leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule
//CONSUMO = QTA * PREZZO(dalla riga documento) //CONSUMO = QTA * PREZZO(dalla riga documento)
//IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE //IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE
const real qta = rout.get_real(RDOC_QTA); const real qta = rout.get_real(RDOC_QTA);
const real consumo = qta * rout.get_real(RDOC_PREZZO); const real consumo = qta * rout.get_real(RDOC_PREZZO);
const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / 100; const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / CENTO;
impvconv += impconv; impvconv += impconv;
consvconv += consumo; consvconv += consumo;
} }
else else
@ -965,7 +969,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
const TString80 codart = riga.get(RDOC_CODART); const TString80 codart = riga.get(RDOC_CODART);
const TRectype & rcont = contr.row(codart); const TRectype & rcont = contr.row(codart);
const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI); const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI);
char lavtype = riga.get_char("LVTYPE"); const char lavtype = riga.get_char("LVTYPE");
if (tipvalconvcli == 'C' && lavtype != 'D') if (tipvalconvcli == 'C' && lavtype != 'D')
{ {
if (arts.objptr(codart) == NULL) if (arts.objptr(codart) == NULL)
@ -987,7 +991,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO); consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO);
} }
} }
//se il consumo è minore del ciclaggio, allora //se il consumo è minore dell'importo convenzionale, allora
if (consumotot < impconvtot) if (consumotot < impconvtot)
{ {
const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO); const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO);
@ -1073,52 +1077,79 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
} }
} }
//se il consumo è minore del ciclaggio, allora if (tipocan == 3)
if (impvconv - consvconv > ZERO)
{ {
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); const real canfis = contr.get_real(LVCONDV_IMPFIX);
const int rows = doc.physical_rows(); const real imponibile = doc.imponibile();
if (canfis > imponibile)
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale e il consumo;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
TRiga_documento& congrow = doc.new_row("01");
const TString80 codartcon = ini_get_string(CONFIG_DITTA, "lv", "Codartcofix");
congrow.put(RDOC_CODART, codartcon);
congrow.put(RDOC_CHECKED, "X");
congrow.put(RDOC_CODARTMAG, codartcon);
congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
congrow.put(RDOC_QTA, UNO);
TString8 codiva = doc.clifor().vendite().get(CFV_ASSFIS);
if (codiva.blank())
codiva = cache().get(LF_ANAMAG, codartcon, ANAMAG_CODIVA);
congrow.put(RDOC_CODIVA, codiva);
if (cicl2rig)
congrow.put(RDOC_PREZZO, impvconv - consvconv);
else
{ {
congrow.put(RDOC_PREZZO, impvconv); TRiga_documento& congrow = doc.new_row("01");
for (int k = rows - 1; k >= 1; k--) const TString80 codartcon = ini_get_string(CONFIG_DITTA, "lv", "Codartcofix");
{
TRiga_documento& delrow = doc[k]; congrow.put(RDOC_CODART, codartcon);
const TString80 codart = delrow.get(RDOC_CODART); congrow.put(RDOC_CHECKED, "X");
const TRectype& rcont = contr.row(codart); congrow.put(RDOC_CODARTMAG, codartcon);
const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF); congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
char lavtype = delrow.get_char("LVTYPE"); congrow.put(RDOC_QTA, UNO);
if (tipoforf == 4 && lavtype != 'D')
doc.destroy_row(k, true); TString4 codiva = doc.clifor().vendite().get(CFV_ASSFIS);
} if (codiva.blank())
codiva = cache().get(LF_ANAMAG, codartcon, ANAMAG_CODIVA);
congrow.put(RDOC_CODIVA, codiva);
congrow.put(RDOC_PREZZO, canfis - imponibile);
} }
} }
else
{
//se il consumo è minore del ciclaggio, allora
if (impvconv > consvconv)
{
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO);
const int rows = doc.physical_rows();
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale e il consumo;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
TRiga_documento& congrow = doc.new_row("01");
const TString80 codartcon = ini_get_string(CONFIG_DITTA, "lv", "Codartcofix");
congrow.put(RDOC_CODART, codartcon);
congrow.put(RDOC_CHECKED, "X");
congrow.put(RDOC_CODARTMAG, codartcon);
congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
congrow.put(RDOC_QTA, UNO);
TString8 codiva = doc.clifor().vendite().get(CFV_ASSFIS);
if (codiva.blank())
codiva = cache().get(LF_ANAMAG, codartcon, ANAMAG_CODIVA);
congrow.put(RDOC_CODIVA, codiva);
if (cicl2rig)
congrow.put(RDOC_PREZZO, impvconv - consvconv);
else
{
congrow.put(RDOC_PREZZO, impvconv);
for (int k = rows - 1; k >= 1; k--)
{
TRiga_documento& delrow = doc[k];
const TString80 codart = delrow.get(RDOC_CODART);
const TRectype& rcont = contr.row(codart);
const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF);
char lavtype = delrow.get_char("LVTYPE");
if (tipoforf == 4 && lavtype != 'D')
doc.destroy_row(k, true);
}
}
}
}
} }
if (redditivita > ZERO && fatt_02() && !ragart && tipocan != 1)
if (redditivita > ZERO && fatt_02() && !ragart && tipocan != 1)
{ {
const real totdoc = doc.totale_doc(); const real totdoc = doc.totale_doc();
const real provvigione1 = doc.provvigione(); const real provvigione1 = doc.provvigione();
@ -2513,14 +2544,14 @@ void TFatturazione_lav_app::main_loop()
numdocgen += elab.write_fatt_ragg(_solototali); numdocgen += elab.write_fatt_ragg(_solototali);
TString str; TString str;
const char* const parolapl = _solototali ? "generate" : "elaborate"; const char* const parolapl = _solototali ? TR("generate") : TR("elaborate");
const char* const parolasi = _solototali ? "generata" : "elaborata"; const char* const parolasi = _solototali ? TR("generata") : TR("elaborata");
switch (numdocgen) switch (numdocgen)
{ {
case 0: str << "Non e' stata " << parolasi << " alcuna fattura"; break; case 0: str << TR("Non è stata ") << parolasi << TR(" alcuna fattura"); break;
case 1: str << "E' stata " << parolasi << " una fattura"; break; case 1: str << TR("E' stata ") << parolasi << TR(" una fattura"); break;
default: str << "Sono state " << parolapl << ' ' << numdocgen << " fatture"; break; default: str << TR("Sono state ") << parolapl << ' ' << numdocgen << TR(" fatture"); break;
} }
if (numdocgen <= 0) if (numdocgen <= 0)
warning_box(str); warning_box(str);

View File

@ -7,7 +7,6 @@ int main(int argc, char** argv)
const int r = (argc > 1) ? argv[1][1] - '0' : 0; const int r = (argc > 1) ? argv[1][1] - '0' : 0;
switch (r) switch (r)
{ {
case 0: lv3100(argc, argv); break; // gestione manuale bolle lv3100
case 1: lv3200(argc, argv); break; // evasione buoni di prelievo lv3200 case 1: lv3200(argc, argv); break; // evasione buoni di prelievo lv3200
case 2: lv3300(argc, argv); break; // gestione manuale buoni di prelievo lv3300 case 2: lv3300(argc, argv); break; // gestione manuale buoni di prelievo lv3300
case 3: lv3400(argc, argv); break; // evasione buoni di prelievo terminale lv3400 case 3: lv3400(argc, argv); break; // evasione buoni di prelievo terminale lv3400

View File

@ -16,6 +16,24 @@
#define FOR_EACH_DOC_ROW_BACK(d, r, row) const TRiga_documento* row = NULL; for (int r = d.rows(); r > 0 && (row = &d[r]) != NULL; r--) #define FOR_EACH_DOC_ROW_BACK(d, r, row) const TRiga_documento* row = NULL; for (int r = d.rows(); r > 0 && (row = &d[r]) != NULL; r--)
HIDDEN bool doc_is_buono_ritiro(const TDocumento& doc)
{
const TString4 codnum = doc.get(DOC_CODNUM);
const TString4 tipo = doc.get(DOC_TIPODOC);
for (int i = 0; ; i++)
{
const TString& n = ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT", "", i);
const TString& t = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT", "", i);
if (n.blank() || t.blank())
break;
if ((codnum.blank() || codnum == n) && tipo == t)
return true;
}
return false;
}
////////////////////////////////////////// //////////////////////////////////////////
//// CLASSE TGESTIONE_BOLLE_MSK //// //// CLASSE TGESTIONE_BOLLE_MSK ////
////////////////////////////////////////// //////////////////////////////////////////
@ -411,8 +429,13 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
default: break; default: break;
} }
TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask(); TGestione_bolle_msk& dmsk = (TGestione_bolle_msk&)f.mask();
if(dmsk.mode() == MODE_INS)
bool init_consegna = false;
if (dmsk.mode() == MODE_INS)
{
dmsk.set(F_CODAG, dmsk.proponi_autista()); dmsk.set(F_CODAG, dmsk.proponi_autista());
init_consegna = !doc_is_buono_ritiro(dmsk.doc());
}
if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()) && dmsk.mode() != MODE_MOD ) if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()) && dmsk.mode() != MODE_MOD )
{ {
@ -489,10 +512,7 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k)
//recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet //recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
TString4 causale = rcont.get(LVRCONDV_CAUSLAV).as_string(); const TString4 causale = lv_get_causale_from_rcontr(rcont.cursor()->curr(), init_consegna);
if (causale.blank() || atoi(causale) == 0)
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
//instanzio una cache sulle anagrafice di magazzino //instanzio una cache sulle anagrafice di magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,codart); const TRectype& anamag = cache().get(LF_ANAMAG,codart);
@ -756,10 +776,7 @@ bool TGestione_bolle_msk::lv_codart_handler(TMask_field& f, KEY k)
const TRectype& rcont = cont.row(codart); const TRectype& rcont = cont.row(codart);
//cerco la causale relativa all'articolo; se non la trovo prendo quella standard //cerco la causale relativa all'articolo; se non la trovo prendo quella standard
TString4 causale = rcont.get(LVRCONDV_CAUSLAV); TString4 causale = lv_get_causale_from_rcontr(rcont, false);
if (causale.blank() || atoi(causale) == 0 )
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
if (rdoc.get("DOTOD").empty()) if (rdoc.get("DOTOD").empty())
{ {
//gestione campi dotazione odierna e dotazione temporanea //gestione campi dotazione odierna e dotazione temporanea
@ -1015,7 +1032,7 @@ bool TGestione_bolle_msk::lv_causale_handler(TMask_field& f, KEY k)
TString16 tmp; TString16 tmp;
tmp << dotmp; tmp << dotmp;
if(msk.field(FR_TIPORIGA).get_long() != 22) if(msk.get_int(FR_TIPORIGA) != 22)
{ {
msk.field(FR_JOLLY2).set(tmp); msk.field(FR_JOLLY2).set(tmp);
//setto le date di inizio e fine della dotazione temporanea //setto le date di inizio e fine della dotazione temporanea
@ -1292,13 +1309,15 @@ TMask* TGestione_bolle_app::get_mask( int mode )
TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc); TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc);
TSheet_field& sheet = m->sfield(F_SHEET); TSheet_field& sheet = m->sfield(F_SHEET);
if (sheet.exist_column(FR_JOLLY1)) //setto l'allineamento a destra dei campi incriminati e pure criminali
{ // Dotazione Odierna Temporanea Iniziale
//setto l'allineamento a destra dei campi incriminati e pure criminali const short id_dot[4] = { FR_JOLLY1, FR_JOLLY2, FR_JOLLY5, 0 };
sheet.set_column_justify(sheet.cid2index(FR_JOLLY1), true); for (int i = 0; id_dot[i]; i++)
sheet.set_column_justify(sheet.cid2index(FR_JOLLY2), true); {
if (sheet.exist_column(id_dot[i]))
sheet.set_column_justify(sheet.cid2index(id_dot[i]), true);
} }
_doc_masks.add(tipodoc, m); _doc_masks.add(tipodoc, m);
const TTipo_documento& tdoc = m->doc().tipo(); const TTipo_documento& tdoc = m->doc().tipo();
const TString_array& handlers = tdoc.handlers(); const TString_array& handlers = tdoc.handlers();
@ -1338,9 +1357,7 @@ void TGestione_bolle_app::salva_conguaglio(const TDocumento_mask& mask)
const TLaundry_contract cont(codcf, indsped, datadoc); const TLaundry_contract cont(codcf, indsped, datadoc);
const int codcont = cont.get_int(LVCONDV_CODCONT); const int codcont = cont.get_int(LVCONDV_CODCONT);
const bool is_buono_ritiro = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") && const bool is_buono_ritiro = doc_is_buono_ritiro(d);
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
TLocalisamfile rcondv(LF_LVRCONDV); TLocalisamfile rcondv(LF_LVRCONDV);
FOR_EACH_DOC_ROW_BACK(d, r, row) FOR_EACH_DOC_ROW_BACK(d, r, row)
@ -1499,9 +1516,8 @@ void TGestione_bolle_app::init_insert_mode(TMask &m)
_giac.reset(d); _giac.reset(d);
//se sto leggendo o generando un buono di ritiro, abilito questo campo //se sto leggendo o generando un buono di ritiro, abilito questo campo
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") && const bool enable_dataprco = doc_is_buono_ritiro(d);
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
mask.field(F_LVDATAPRCO).enable(enable_dataprco); mask.field(F_LVDATAPRCO).enable(enable_dataprco);
mask.reset_var_mask(); mask.reset_var_mask();
@ -1513,10 +1529,10 @@ void TGestione_bolle_app::init_insert_mode(TMask &m)
//ridefinisco il metodo init_query_mode della TMotore_application //ridefinisco il metodo init_query_mode della TMotore_application
void TGestione_bolle_app::init_modify_mode(TMask& mask) void TGestione_bolle_app::init_modify_mode(TMask& mask)
{ {
TGestione_bolle_msk& m = (TGestione_bolle_msk&) mask;
//se sto leggendo o generando un buono di ritiro, abilito questo campo //se sto leggendo o generando un buono di ritiro, abilito questo campo
bool enable_dataprco = mask.get(F_CODNUM) == ini_get_string(CONFIG_DITTA, "lv", "NUM_RIT(0)") && const bool enable_dataprco = doc_is_buono_ritiro(m.doc());
mask.get(F_TIPODOC) == ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_RIT(0)");
mask.field(F_LVDATAPRCO).enable(enable_dataprco); mask.field(F_LVDATAPRCO).enable(enable_dataprco);
mask.first_focus(F_CODCF, false); mask.first_focus(F_CODCF, false);

View File

@ -414,7 +414,8 @@ bool TGestione_buoni_msk::set_righe_buono_handler(TMask_field& f, KEY k)
} }
TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&)f.mask(); TGestione_buoni_msk& dmsk = (TGestione_buoni_msk&)f.mask();
if(dmsk.mode() == MODE_INS) const bool ins_mode = dmsk.mode() == MODE_INS;
if (ins_mode)
dmsk.set(F_CODAG, dmsk.proponi_autista()); dmsk.set(F_CODAG, dmsk.proponi_autista());
if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()) && dmsk.mode() != MODE_MOD) if (ok && k == K_TAB && ((dmsk.insert_mode() && f.to_check(k, true)) || f.focusdirty()) && dmsk.mode() != MODE_MOD)
@ -492,11 +493,8 @@ bool TGestione_buoni_msk::set_righe_buono_handler(TMask_field& f, KEY k)
//recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet //recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet
const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); const TString80 codart = rcont.get(LVRCONDV_CODART).as_string();
TString4 causale = rcont.get(LVRCONDV_CAUSLAV).as_string(); const TString4 causale = lv_get_causale_from_rcontr(rcont.cursor()->curr(), ins_mode);
if (causale.blank() || atoi(causale) == 0)
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
//instanzio una cache sulle anagrafice di magazzino //instanzio una cache sulle anagrafice di magazzino
const TRectype& anamag = cache().get(LF_ANAMAG,codart); const TRectype& anamag = cache().get(LF_ANAMAG,codart);
@ -1485,7 +1483,6 @@ TGiac_per_cli& TGestione_buoni_app::giacenza()
int lv3300( int argc, char* argv[]) int lv3300( int argc, char* argv[])
{ {
TGestione_buoni_app a; TGestione_buoni_app a;
a.run( argc, argv, TR("Buoni di Prelievo")); a.run( argc, argv, TR("Buoni di Prelievo"));
return 0; return 0;
} }

View File

@ -200,11 +200,13 @@ Col(5)=FR_DESCR||28
Col(6)=FR_CAULAV|Caus.|5 Col(6)=FR_CAULAV|Caus.|5
Col(7)=FR_RITIRO|Ritiro|6 Col(7)=FR_RITIRO|Ritiro|6
Col(8)=FR_QTA|Rotti|6 Col(8)=FR_QTA|Rotti|6
Col(9)=FR_TIPORIGA|Tipo|4 Col(9)=FR_JOLLY1|Dot.Od.|7
Col(10)=FR_CODMAG Col(10)=FR_JOLLY5|Dot.In.|7
Col(11)=FR_CODDEP Col(11)=FR_TIPORIGA|Tipo|4
Col(12)=FR_CODMAGC Col(12)=FR_CODMAG
Col(13)=FR_CODDEPC Col(13)=FR_CODDEP
Col(14)=FR_CODMAGC
Col(15)=FR_CODDEPC
[RIGHE] [RIGHE]

View File

@ -120,6 +120,25 @@ long lv_find_contract(const long codcf, const long indsped, const TDate& data)
return cod; return cod;
} }
const TString& lv_get_causale_from_rcontr(const TRectype& rcont, bool is_consegna)
{
TString4 causale = rcont.get(LVRCONDV_CAUSLAV);
if (causale.blank() || atoi(causale) == 0)
causale = ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV");
if (is_consegna)
{
const TString& causale_consegna = cache().get("&CAU", causale, "S5");
if (causale_consegna.full())
causale = causale_consegna;
}
return get_tmp_string() = causale;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TLaundry_contract // TLaundry_contract
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -16,6 +16,8 @@ void lv_set_update_info(TRectype& rec);
long lv_find_contract(const long codcf, const long indsped, const TDate& data); long lv_find_contract(const long codcf, const long indsped, const TDate& data);
bool lv_is_holiday(const TDate& data); bool lv_is_holiday(const TDate& data);
bool lv_is_02_active(); bool lv_is_02_active();
const TString& lv_get_causale_from_rcontr(const TRectype& lvcontr, bool is_consegna);
const TFilename & lv_backup_path(); const TFilename & lv_backup_path();
class TLaundry_contract : public TRectype class TLaundry_contract : public TRectype

View File

@ -1,10 +1,6 @@
#ifndef __LVLIB2_H #ifndef __LVLIB2_H
#define __LVLIB2_H #define __LVLIB2_H
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __RECSET_H #ifndef __RECSET_H
#include <recset.h> #include <recset.h>
#endif #endif

View File

@ -195,6 +195,25 @@ BEGIN
FIELD PREZZO FIELD PREZZO
END END
GR -1 78 4
BE
PR 1 10 "@bDotazioni"
EN
NU 155 7
BE
PR 2 11 "Dotazione Odierna "
FI DOTOD
FL "D"
EN
NU 159 7
BE
PR 2 12 "Dotazione iniziale "
FI DOTIN
FL "D"
EN
STRING FR_CAULAV 3 STRING FR_CAULAV 3
BEGIN BEGIN
PROMPT 2 7 "Cau.Lav. " PROMPT 2 7 "Cau.Lav. "